Mettere in pausa il gioco all'interno del ciclo di gioco


12

All'interno del loop di gioco, il gioco viene messo in pausa premendo P, il che significa che il loop di gioco non viene più eseguito. Il problema è che dopo l'arresto di questo loop, P non può essere premuto nuovamente per riprendere il loop, poiché era all'interno del loop stesso. Come fare in modo che quando si preme di nuovo P fa funzionare nuovamente il loop?

Risposte:


20

In realtà non interrompere il ciclo di gioco quando si mette in pausa il gioco. Invece, devi aggiungere la variabile bool, che viene cambiata in vero / falso a seconda che il gioco sia in pausa. Se il gioco è in pausa, devi solo interrompere l'aggiornamento del gioco, ma puoi comunque continuare a renderizzare il fotogramma corrente incluso ottenere aggiornamenti dall'input.

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();

Potresti voler avere una checkInputfunzione diversa per la modalità di pausa e la modalità di non pausa, perché potrebbero esserci alcuni controlli che sono disponibili solo in una modalità o nell'altra. La checkInputfunzione per la modalità di pausa potrebbe non fare altro che guardare se Pviene premuto e quindi impostato gameIsPaused = false, ma alcuni giochi mettono anche funzionalità aggiuntive nella schermata di pausa (negli anni '90 era popolare avere la schermata di pausa come input nascosto per cheat code, moderna giochi come combinarlo con una schermata di menu).
Philipp,

1
Sebbene in generale concordi con la tua risposta, penso che dovrebbe essere esplicitamente dichiarato che a volte è perfettamente valido eseguire alcuni aggiornamenti nello stato di pausa. Ad esempio, animando le voci di menu o forse un po 'di gestione dell'audio. La grande idea è che la condizione di pausa ti permetta di diramare in un altro set di checkInput/ render/ updatechiamate.
Nicholas Miller,

L'unica cosa che dovrebbe cambiare nel mettere in pausa il gioco è che il bit "update world" dovrebbe essere saltato. Tutte le altre funzionalità dovrebbero probabilmente rimanere normali.
Mooing Duck,

4
Ho cercato di mantenere la risposta il più semplice possibile, perché questa è roba di base nella programmazione del gioco e non volevo confondere l'interrogatore.
Katu,

1
@ user3730788: Un ramo che viene eseguito una volta per ogni ciclo di gioco (cioè meno di 100 volte al secondo) non avrà alcun impatto sulle prestazioni distinguibile, nemmeno se è pronosticati male ogni volta .
Ilmari Karonen,

1

Fai in modo che la pressione di P passi a un altro loop che gestisca lo stato di gioco "In pausa" e consenta di tornare al loop di gioco originale premendo nuovamente P.

Puoi effettivamente inserire tutto questo nel loop di gioco stesso e introdurre una variabile di stato, se lo desideri e invece di disattivare il loop, la variabile di stato commuta tra l'esecuzione del rispettivo codice specifico dello stato all'interno del loop.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.