Das Spiel innerhalb der Spielrunde pausieren

12

Innerhalb der Spieleschleife wird das Spiel durch Drücken von P unterbrochen, was bedeutet, dass die Spieleschleife nicht mehr ausgeführt wird. Das Problem ist, dass nach dem Anhalten dieser Schleife P nicht erneut gedrückt werden kann, um die Schleife fortzusetzen, da sie sich innerhalb der Schleife befand. Wie mache ich es so, dass die Schleife wieder funktioniert, wenn P erneut gedrückt wird?

GSquadron
quelle

Antworten:

20

Unterbrechen Sie die Spielrunde nicht, wenn Sie das Spiel anhalten. Stattdessen müssen Sie eine Bool-Variable hinzufügen, die je nach Spielpause in true / false geändert wird. Wenn das Spiel angehalten wird, müssen Sie nur die Aktualisierung des Spiels beenden. Sie können jedoch weiterhin das aktuelle Bild rendern, einschließlich Aktualisierungen von der Eingabe.

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();
Katu
quelle
Möglicherweise möchten Sie eine andere checkInputFunktion für den angehaltenen und den nicht angehaltenen Modus verwenden, da einige Steuerelemente möglicherweise nur in dem einen oder anderen Modus verfügbar sind. Die checkInputFunktion für den pausierten Modus ist möglicherweise nichts anderes, als zu suchen, ob Pgedrückt und dann eingestellt wird gameIsPaused = false, aber einige Spiele stellen zusätzliche Funktionen auf den Pausenbildschirm (in den 90er Jahren war es beliebt, den Pausenbildschirm als versteckte Eingabe für Cheat-Codes zu haben, modern Spiele wie es mit einem Menübildschirm zu kombinieren).
Philipp
1
Obwohl ich Ihrer Antwort im Allgemeinen zustimmen würde, sollte ich ausdrücklich darauf hinweisen, dass es manchmal durchaus sinnvoll ist, einige Aktualisierungen im angehaltenen Zustand auszuführen . Zum Beispiel zum Animieren von Menüelementen oder vielleicht zum Verwalten von Audiodaten. Die große Idee ist , dass die Pause Bedingung , die Sie in einer anderen Satz von verzweigen können checkInput/ render/ updateAnrufen.
Nicholas Miller
Das einzige, was sich durch das Anhalten des Spiels ändern sollte, ist, dass das Bit "Welt aktualisieren" übersprungen werden sollte. Alle anderen Funktionen sollten wahrscheinlich normal bleiben.
Mooing Duck
4
Ich habe versucht, die Antwort so einfach wie möglich zu halten, da dies sehr grundlegende Dinge in der Spielprogrammierung sind und ich den Fragesteller nicht verwirren wollte.
Katu
1
@ user3730788: Ein Zweig, der einmal pro Spielschleife ausgeführt wird (dh weniger als 100 Mal pro Sekunde), hat keine erkennbaren Auswirkungen auf die Leistung, auch wenn er jedes Mal falsch vorhergesagt wird .
Ilmari Karonen,
1

Stellen Sie sicher, dass durch Drücken von P zu einer anderen Schleife gewechselt wird, die den Spielstatus "Pausiert" verarbeitet und durch erneutes Drücken von P den Übergang zur ursprünglichen Spielschleife ermöglicht.

Sie können dies alles in die Spielschleife selbst einfügen und eine Zustandsvariable einfügen. Wenn Sie möchten und die Schleife nicht deaktivieren möchten, wechselt die Zustandsvariable zwischen der Ausführung des jeweiligen zustandsspezifischen Codes innerhalb der Schleife.

Haf
quelle