Styxu2153 Opublikowano 11 Czerwca 2013 Udostępnij Opublikowano 11 Czerwca 2013 To znowu ja... Ostatnio ciągle wpadam na nowe problemy. Tym razem problem tkwi w tym, iż nie mam zielonego pojęcia jak zrobić aby po naciśnięciu przycisku "escape" czas w roomie się zatrzymał, wtedy wyświetla mi się okienko na środku z przyciskami resume etc. Okienko, przyciski wszystko działa, ale ja ciągle nie wiem jak zatrzymać wszystkie obiekty (oprócz oczywiście tego okienka z przyciskami). komenda sleep, działa tylko o określony czas i zatrzymuję wszystkie obiekty, więc nie wiem już co mogę zrobić :( Proszę o pomoc i z góry dziękuję za odpowiedzi :) I jeszcze prośba, mógłby mi ktoś wytłumaczyć jak zrobić żeby po pierwszym wciśnięciu "escape" okienko z przyciskami się pojawiało, a po drugim znikało. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 11 Czerwca 2013 Udostępnij Opublikowano 11 Czerwca 2013 https://gmclan.org/index.php?plik=176 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Styxu2153 Opublikowano 11 Czerwca 2013 Autor Udostępnij Opublikowano 11 Czerwca 2013 No tak, tyle że ten przykład pokazuję jak się przytrzymuję spację, mi bardziej zalezy że jak raz nacisnę Esc to zatrzymuję a jak drugi to dalej leci :P. No i chciałbym jeszcze wiedzieć co zrobić z tym "escape". Ale dziękuję za pomoc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Lechu4444 Opublikowano 11 Czerwca 2013 Udostępnij Opublikowano 11 Czerwca 2013 Po pierwsze to w global game setting musisz wyłączyć to że jak wciska się escape to wyłącza się gra zakładka other chyba że korzystasz ze Studio tam nie ma tego problemu, a potem możesz dodać event ja pauze jeśli o to chodzi polecam robić message'em show_message('bla bla') lub jak chcesz żeby było na przekład tam wyjście czy cuś to show_message_ext z tego co pamiętam trzeba go użyć tak: GML zmienna=show_message_ext('Co chcesz zrobić?','Wznów','Pomoc','Wyjście') switch(zmienna) { 1: /*nie wiem czy jak tu się zostawi puste to wiadomość zniknie ale zawsze warto spróbować;P*/ break; 2: /*nie koniecznie tu musisz jakąś pomoc dawać tak dla przykładu dałem*/ break; 3: game_end; break; } E. Jeszcze miałem napisać o tej trudniejszej wersji pauzy przy niej trzeba znać się na surface'ach zapamiętujesz obraz ekranu do takiego surface'a potem dezaktywujesz wszystkie obiekty na terenie całego roomu i wyświetlasz obraz zapamiętany w surface. Ewentualnie można spróbować ze zmienną globalną global.pauza którą ustawiasz na true, albo false. Ale wtedy każdemu obiektowi w step musisz dać warunek if(global.pauza==false) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kaszan88 Opublikowano 11 Czerwca 2013 Udostępnij Opublikowano 11 Czerwca 2013 Dawniej jak nie umiałem za bardzo programować to robiłem specjalny room do którego przechodziłem jak włączało się pauzę. Jeśli w roomie gry zapisują się wszystkie ustawienia "persistent" to bez problemu można iść do rooma z pauzą, a potem wrócić do ostatniego. Jeśli potrzebujesz widoku gry, to jest chyba funkcja robienia obrazka ze screena. Jeżeli etapy nie zapisują ustawień, to ten sposób nie wypali bez resetu poziomu, chyba, że jeszcze bardziej się nakombinuje :D Pewno można przypisać persistent do rooma podczas gry, chociaż nie jestem pewien. Co do pomysłu z globalną pauzą, to ja stosuję odwrócony if :D If (global.pauza) exit; Jedna klamra mniej do pilnowania :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
copoconaco Opublikowano 12 Czerwca 2013 Udostępnij Opublikowano 12 Czerwca 2013 wyłączy wszystkie obiekty, poza obiektem z którego aktywujesz te funkcję - przestana być rysowane, przestaną się poruszać wukonywać posiadane skrypty, pętle i obliczenia. GML instance_deactivate_all(1); włączy ponownie obiekty o podanej nazwie, przy czym równie dobrze włączy całą grupę obiektów jeśli będą one podpięte pod parent GML instance_activate_object("nazwa-obiektu"); włączy wszystko co było wyłączone GML instance_activate_object(all); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Styxu2153 Opublikowano 12 Czerwca 2013 Autor Udostępnij Opublikowano 12 Czerwca 2013 @copoconaco No tak, tylko mi chodzi o to żeby obiekty zostały, lecz zaprzestały swojego działania, wykonywania kodu. Czyli po prostu wszystko stoi w miejscu. Oczywiście wszystko poza menu które się wyświetla/ @kaszan88 takie rozwiązanie mam obecnie, ale chciałbym jakoś zrobić żeby to było podczas grania danego poziomu, a nie w innym roomie. Chociaż może rzeczywiście zrobię to sposobem, zapisania obrazu i wyświetlenia go, będzie to dawało wrażenie jakby się wszystko zatrzymało. Mimo wszystko chciałbym dowiedzieć się czy jest sposób w GM-ie, na zatrzymanie obiektów. :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kaszan88 Opublikowano 12 Czerwca 2013 Udostępnij Opublikowano 12 Czerwca 2013 Jest mnóstwo sposobów :) Ja mam np obiekt Pauza i we wszystkich obiektach, które mają sie zatrzymywać mam warunek if(instance_number(Pauza)>0)exit; Mam to zrobione funkcją a nie zwykłym ifem, ale to nie zmienia logiki. Dzięki temu ptaszki dalej latają sobie po niebie, bo to tylko tło i nie ma wpływu na grę. Zatrzymuję tylko ważne dla gry obiekty. Możesz zrobić tak jak proponował copoconaco zapisać obraz, dezaktywować wszystkie obiekty i w tym czasie wyświetlać po prostu obrazek a potem znowu je aktywować. To dobre i łatwe do zrobienia rozwiązanie zwłaszcza, gdy używasz alarmów. Bo przestaną się odliczać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
cysior Opublikowano 12 Czerwca 2013 Udostępnij Opublikowano 12 Czerwca 2013 możesz zrobić to na zmiennych globalnych. np. w create bohatera global.czasnaprzerwe=false. Dodajesz do każdego obiektu, który chcesz stopować w kazdy event w którym chcesz stopować wykonywanie kodu. GML if global.czasnaprzerwe=false { akcja w danym evencie // step, draw co tam jeszcze chcesz } Musisz pamiętać, aby w tym obj w którym chcesz stopować daj kod : GML if global.czasnaprzerwe=false { if keyboard_check_pressed(vk_escape) { global.czasnaprzerwe=true } //kod, który się wykonuje gdy nie ma przerwy } else { if keyboard_check_pressed(vk_escape) { global.czasnaprzerwe=false } } E: Jeżeli chcesz ciagle rysować bohatera i inne rzeczy, to nie dawaj opcji stopu w drawie E2: Jeżeli nie używasz gm studio, to masz w gm pod objects,rooms, game info - "Global Game Settings". I tam w zakładce Other odznacz "Let <ESC> end the game." E3: Pomysł kaszan'a88 w praktyce GML if keyboard_check_pressed(vk_escape) { global.czasnaprzerwe= !global.czasnaprzerwe; } if global.czasnaprzerwe=false { //kod, który się wykonuje gdy nie ma przerwy } else { // kod, który się wykonuje gdy jest przerwa } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kaszan88 Opublikowano 12 Czerwca 2013 Udostępnij Opublikowano 12 Czerwca 2013 Mam kolejną podpowiedź :D Zamiast if (czasnaprzerwe = false) czasnaprzerwe = true; dajesz GML if keyboard_check_pressed(vk_escape) global.czasnaprzerwe= !global.czasnaprzerwe; ! neguje wartość. Często się to przydaje w skracaniu kodu. A zamiast sprawdzać zmienna = false można dać !zmienna albo not zmienna. Wtedy jeśli jest false, to zaneguje to na true. Jeśli chcemy true, to wystarczy dać if(zmienna). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
cysior Opublikowano 12 Czerwca 2013 Udostępnij Opublikowano 12 Czerwca 2013 @up W tym przypadku, wyjdzie tylko dłużej. Chyba, że da to przed kod. Piss JOŁ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się