Skocz do zawartości
Ice Cube

Zatrzymanie gry

Rekomendowane odpowiedzi

Cześć

chce w grze zrobić coś w stylu show_message ale po swojemu

chodzi o to by wyświetlic napis i zatrzymać gre na tak długo,aż np. nie nacisne myszką na okienko OK lub nie nacisne esc.

 

roumiem,że będe potrzebować jakiegoś loopa i skoku (programowałem kiedyś w basicu i asm tam takie cos było :P )coś w stylu:

 

1 wyswietl napis

2 jezeli nacisniete esc lub myszka na ok skocz do 4

3 jump do 1

4 dalsza czesc programu

 

próbowałem kombinować coś z while ,ale zawieszała mi sie gra ..

poprosze o jakies sugestie

 

 

 

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Cześć, musisz przyblokować wykonywanie się kodu innym obiektom, pętla while Ci nie zadziała ze względu na to, jak działa pętla główna Game Makera. Jak używasz pętli while, to GameMaker nie przetwarza systemowych zdarzeń jak np. kliknięcie myszką czy klawisza.

 

Żeby przyblokować wykonywanie kodu w obiektach, możesz stworzyć np. zmienną globalną jak:

global.is_paused = false;

A potem w każdym z obiektów w Step Event, przed blokiem całego kodu dodaj po prostu taką linijkę:

if (global.is_paused) exit;

Jak chcesz zapałzować grę, to po prostu ustawiasz zmiennej global.is_paused na true, analogicznie odblokowujesz grę po ustawieniu global.is_paused na false.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Godzinę temu, Konrad-GM napisał:

Cześć, musisz przyblokować wykonywanie się kodu innym obiektom, pętla while Ci nie zadziała ze względu na to, jak działa pętla główna Game Makera. Jak używasz pętli while, to GameMaker nie przetwarza systemowych zdarzeń jak np. kliknięcie myszką czy klawisza.

 

Żeby przyblokować wykonywanie kodu w obiektach, możesz stworzyć np. zmienną globalną jak:


global.is_paused = false;

A potem w każdym z obiektów w Step Event, przed blokiem całego kodu dodaj po prostu taką linijkę:


if (global.is_paused) exit;

Jak chcesz zapałzować grę, to po prostu ustawiasz zmiennej global.is_paused na true, analogicznie odblokowujesz grę po ustawieniu global.is_paused na false.

powaznie nie ma innego sposobu?,mam chyba z 1000 obiektów  ;/ nie idzie jakos całości zatrzymać np.przy pomocy keyboard wait() ?,albo przy pomocy ukrytego show_message,by tylko zatrzymało gre ?

 

 

 

ps. ale klikniecie myszka,wyswietlanie napisu było by własnie w petli,ewentualnie zamiast myszki

zrobiłbym klawiature

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Możesz jeszcze użyć dezaktywacji obiektów, ale trzeba pamiętać, aby obiekt popup-a był aktywny, bo inaczej nie będzie można wrócić do gry ;) W Create Event obiektu obj_popup daj taki kod:

instance_deactivate_all();
instance_activate_object(obj_popup);

Ale pamiętaj też o aktywacji obiektów po zniknięciu komunikatu, np. w Event Destroy obiektu obj_popup daj:

instance_activate_all();

 

Edit:

Godzinę temu, Ice Cube napisał:

ps. ale klikniecie myszka,wyswietlanie napisu było by własnie w petli,ewentualnie zamiast myszki

zrobiłbym klawiature

 

GameMaker nie udostępnia funkcji do przetworzenia zdarzeń systemowych -> pętla w grze po prostu Ci nie zadziała, bo nie będziesz w stanie obsłużyć żadnego kliknięcia, nawet krzyżyka na belce okna. Jeżeli pisałeś kiedykolwiek aplikacje na Windowsa, to jest tam taka funkcja jak GetMessage/PeekMessage, GameMaker nie udostępnia swojego odpowiednika ;) Pętla musiałaby wyglądać tak:


1. obsłuż zdarzenia systemowe

2. jezeli nacisniete esc lub myszka na ok skocz do 6<- tutaj można sprawdzić, czy esc/myszka została naciśnięta bo zdarzenia systemowe zostały zinterpretowane

3. wyswietl napis

4. swap buffers - wyświetl na ekran wygenerowany obraz

5. skocz do 1

6. <kontynuuj program>

 

Ale w GameMakerze jest to niemożliwe. Przynajmniej nie znalazłem funkcji do obsługi systemowych zdarzeń.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Wtedy oczywiście wszystko zniknie z ekranu ale i na to jest rozwiązanie by redrawować cały screen do surface i ten popup by sobie go rysował.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

a jak to robi show_message ? ,macie może cały kod ,chętnie bym zobaczył jak ta komenda "zamraża" wszystko,a mimo tego widać wszystko na ekranie plus wiadomość oczywiście i obsługa myszki

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×