Spielzustand-Automaten

Aus Spieleprogrammierer-Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
[unmarkierte Version][unmarkierte Version]
(Stapelverarbeitung von Zuständen)
K (Stapelverarbeitung von Zuständen)
Zeile 30: Zeile 30:
 
=== Stapelverarbeitung von Zuständen ===
 
=== Stapelverarbeitung von Zuständen ===
  
Neben dem simplen Setzen von Zuständen ist die Abfolge von Zustandswechsel ein interessantes Thema. Dieses Problem lässt sich durch einen Stack sehr gut lösen. Der <tt>StateManager</tt> besitzt einen Stack, der eine Menge an Zuständen referenziert. Dabei gilt das [http://de.wikipedia.org/wiki/Last_In_%E2%80%93_First_Out LIFO-Prinzip] ('''L'''ast '''I'''n '''F'''irst '''O'''ut). Mit Hilfe der Methoden <tt>PushState</tt> lässt sich ein neuer Zustand auf den Stapel packen, der auch gleichzeitig der Aktive ist. Das Gegenstück lautet <tt>PopState</tt> und nimmt letzt eingefügten Zustand vom Stapel. Durch dieses Prinzip gestalten sich Zustandsübergänge durch eine Kombination aus <tt>PushState</tt> und <tt>PopState</tt>. Hier ein einfaches Beispiel:
+
Neben dem simplen Setzen von Zuständen ist die Abfolge von Zustandswechsel ein interessantes Thema. Dieses Problem lässt sich durch einen Stack sehr gut lösen. Der <tt>StateManager</tt> besitzt einen Stack, der eine Menge an Zuständen referenziert. Dabei gilt das [http://de.wikipedia.org/wiki/Last_In_%E2%80%93_First_Out LIFO-Prinzip] ('''L'''ast '''I'''n '''F'''irst '''O'''ut). Mit Hilfe der Methoden <tt>PushState</tt> lässt sich ein neuer Zustand auf den Stapel packen, der auch gleichzeitig der Aktive ist. Das Gegenstück lautet <tt>PopState</tt> und nimmt den zuletzt eingefügten Zustand vom Stapel. Durch dieses Prinzip gestalten sich Zustandsübergänge durch eine Kombination aus <tt>PushState</tt> und <tt>PopState</tt>. Hier ein einfaches Beispiel:
  
Ein Spiel besitzt drei Zustände: ''Hauptmenü'', ''Spiel'', ''Demo''. Der StateManager hat vorerst einen leeren Stapel. Beim Starten des Programmes wird der Zustand ''Hauptmenü'' mit <tt>PushState</tt> als erster Zustand gesetzt. Nun entscheidet sich der Spieler, ein neues Spiel zu starten. Im Programm wird mit <tt>PushState</tt> der Zustand ''Spiel'' auf den Stapel gepackt. Dadurch ist ''Spiel'' der aktuelle Zustand. Nachdem der Spieler sein Spiel gespielt und verloren hat, möchte er das Spiel erneut mit einem anderen Schwierigkeitsgrad spielen und beendet das Spiel, um in das Hauptmenü zu gelangen. Dazu wird <tt>PopState</tt> aufgerufen, wodurch der Zustand ''Spiel'' vom Stapel genommen wird und ''Hauptmenü'' wieder der aktuelle Zustand ist.
+
Ein Spiel besitzt drei Zustände: ''Hauptmenü'', ''Spiel'' und ''Demo''. Der <tt>StateManager</tt> hat vorerst einen leeren Stapel. Beim Starten des Programmes wird der Zustand ''Hauptmenü'' mit <tt>PushState</tt> als erster Zustand gesetzt. Nun entscheidet sich der Spieler, ein neues Spiel zu starten. Im Programm wird mit <tt>PushState</tt> der Zustand ''Spiel'' auf den Stapel gepackt. Dadurch ist ''Spiel'' der aktuelle Zustand. Nachdem der Spieler sein Spiel gespielt und verloren hat, möchte er das Spiel erneut mit einem anderen Schwierigkeitsgrad spielen und beendet das Spiel, um in das Hauptmenü zu gelangen. Dazu wird <tt>PopState</tt> aufgerufen, wodurch der Zustand ''Spiel'' vom Stapel genommen wird und ''Hauptmenü'' wieder der aktuelle Zustand ist.
  
 
[[Datei:Stack states.png]]
 
[[Datei:Stack states.png]]

Version vom 7. November 2011, 15:53 Uhr

Klicke hier, um diese Version anzusehen.

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge