2017-03-04 3 views
-2

Ich habe ein einfaches C++ und OpenGL-Spiel, in dem Spieler Ziele schießen. Ich möchte Spielern erlauben, das Spiel jederzeit neu zu starten, indem Sie "R" drücken, wodurch die Ziele, die Spielerposition usw. zurückgesetzt werden. Mein Spiel besteht hauptsächlich in der Hauptfunktion, die zuerst die Physik- und Mesh-Daten einrichtet Ich habe eine Do-While-Schleife, die die Ziele für jeden Frame zeichnet.Wie kann ein Spiel jederzeit neu gestartet werden?

Ich Capture derzeit mit GLFW, wenn der Benutzer Esc (in der Do-While-Schleife) trifft, damit ich das Fenster schließen kann, aber wie genau würde ich gehen, das Spiel neu zu starten?

Müsste ich die Variablen des Spiels, die Position des Spielers manuell neu setzen, die Ziele neu zeichnen usw. Oder gibt es eine Möglichkeit, einfach vor der Do-While-Spielschleife zu springen und neu zu beginnen?

Danke, und Entschuldigung, wenn das trivial ist.

EDIT: Im Moment habe ich so etwas wie diese:

main() { 
initialise window; 
get mesh vertices; 
set textures; 
initialise Bullet physics; 

do { 
ray picking; 
render targets and walls; 
} while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && 
     glfwWindowShouldClose(window) == 0); 
} 
+0

Sound ist ziemlich breit. Stelle ein Event zur Verfügung, das dein Spiel aus der Hauptschleife wiederherstellt. –

+0

Wenn Sie das Spiel mit einem Model-Command-View-System geschrieben haben, sollte das vorübergehende Löschen der Ansicht kein Problem sein. Wenn Sie Modell-, Befehls- und Ansichtscode wahllos gemischt haben, ist es vielleicht ein Problem, sie zu trennen, –

Antwort

1

Ich würde empfehlen, auf das Zeichenbrett zurück, buchstäblich. Entwerfe zuerst und verschiebe deine Schleife aus dem Hauptmenü. Erstelle einen Thread, um das Spiel zu starten, und spawne einen Thread, um auf Tastaturereignisse zu reagieren, und schütze ihn vor Wettkämpfen durch eine Art von Synchronisation. Definieren Sie eine Methode mit dem Namen GameReset, die implementiert, was Sie wollen, indem Sie den Spiel-Thread stoppen und Ihre Objekte erneut instanziieren, die ihre eigenen Zustände initialisieren sollten. Sie erhalten mehr Hilfe, indem Sie mehr Informationen bereitstellen, z. B. Betriebssystem und Umgebung, wobei Entwicklungsbibliotheken verwendet werden. Ich versuche, hilfreich zu sein.

+0

Danke, ich schätze die Hilfe. Ich habe nicht wirklich Zeit, meinen Code neu zu gestalten, obwohl Sie absolut richtig sind, dies zu empfehlen. Es ist nur eine zusätzliche Funktion, wenn möglich, ich habe nur gehofft, etwas einzuführen wie "Wenn R gedrückt wird, laufe wieder nach dem Punkt, an dem man in Scheitelpunkte lädt und Kollisionskästen aufstellt". –

Verwandte Themen