Wstrzymywanie gry w pętli gry

12

Wewnątrz pętli gra zostaje zatrzymana przez naciśnięcie P, co oznacza, że ​​pętla nie działa. Problem polega na tym, że po zatrzymaniu tej pętli nie można ponownie nacisnąć P, aby wznowić pętlę, ponieważ znajdowała się ona w samej pętli. Jak to zrobić, aby po ponownym naciśnięciu P pętla znów działała?

GSquadron
źródło

Odpowiedzi:

20

Nie zatrzymuj pętli gry podczas jej wstrzymywania. Zamiast tego musisz dodać zmienną bool, która zmienia się na true / false w zależności od tego, czy gra jest wstrzymana. Jeśli gra jest wstrzymana, musisz tylko przestać ją aktualizować, ale nadal możesz renderować bieżącą ramkę, w tym pobierać aktualizacje z danych wejściowych.

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();
Katu
źródło
Możesz chcieć mieć inną checkInputfunkcję dla trybu wstrzymanego i wstrzymanego, ponieważ mogą istnieć pewne elementy sterujące, które są dostępne tylko w jednym lub drugim trybie. checkInputFunkcja dla trybu wstrzymania może zrobić nic więcej niż patrząc czy Pjest wciśnięty, a następnie ustawić gameIsPaused = false, ale niektóre gry umieszczać również dodatkowo funkcjonalność na ekranie pauzy (w latach 90. było to popularne mieć ekran pauzy jako ukryte wejście kody, nowoczesny gry lubią łączyć je z ekranem menu).
Philipp
1
Chociaż ogólnie zgadzam się z twoją odpowiedzią, myślę, że należy wyraźnie powiedzieć, że czasami jest całkowicie poprawne uruchomienie niektórych aktualizacji w stanie wstrzymania. Na przykład animowanie elementów menu lub zarządzanie audio. Wielki pomysł polega na tym, że warunek pauzy pozwala na rozgałęzienie się na inny zestaw połączeń checkInput/ render/ update.
Nicholas Miller,
Jedyne, co powinno zatrzymać pauzę w grze, to pominięcie bitu „świata aktualizacji”. Wszystkie pozostałe funkcje powinny prawdopodobnie pozostać normalne.
Kaczka Mooing
4
Starałem się, aby odpowiedź była jak najprostsza, ponieważ jest to bardzo podstawowa rzecz w programowaniu gier i nie chciałem mylić pytającego.
Katu,
1
@ user3730788: Gałąź, która wykonuje się raz na pętlę gry (tj. mniej niż 100 razy na sekundę), nie będzie miała zauważalnego wpływu na wydajność, nawet jeśli będzie za każdym razem źle przewidywana .
Ilmari Karonen,
1

Zrób tak, aby naciśnięcie P przełączyło się na inną pętlę, która obsługuje stan gry „Wstrzymana” i pozwala na powrót do oryginalnej pętli gry, naciskając ponownie P.

Możesz umieścić to wszystko w samej pętli gry i wprowadzić zmienną stanu, jeśli chcesz i zamiast jej wyłączyć, zmienna stanu przełącza się między wykonywaniem odpowiedniego kodu stanu w pętli.

Haf
źródło