2017-06-21 11 views
1

Ich bin neu zu Phaser und ich habe ein Multilevel-Puzzle-Spiel geschrieben.Wie man einen Zustand in Phaser beendet und zurück zu einem vorherigen Zustand

Hierarchisch die Staaten gehen so etwas wie dieses - Menü -> Stufe 1 -> Stufe 2 -> usw.

Nehmen wir nun an spiele ich Stufe 1 und entweder nach Fertigstellung Ebene oder in der Mitte, wenn ich Taste drücken zurück Ich möchte in der Lage sein, in den Menüzustand zurückzukehren und von dort aus möchte ich zurück zu den vorderen Ebenen navigieren können, wenn ich weiterspielen möchte.

Zunächst nahm ich an, this.state.start('anyLevel') könnte mich in einen beliebigen Zustand bringen und der Zustand würde normal laufen, als wenn zum ersten Mal seit dem Start ausgeführt. Es ist jedoch schwierig, zu Staaten zurückzukehren, die bereits einmal gefeuert wurden. Was ich brauche, ist in der Lage zu sein, zu einem vorherigen Zustand zurückzukehren, und der Zustand sollte sich so verhalten, wie er es beim ersten Mal seit dem Booten tun würde. Ich habe irgendwo gelesen, dass ich den Zustand über shutDown() bevor Sie einen neuen Zustand beginnen und ich habe aufzuräumen müssen:

shutdown: function() { 
    this.game.world.removeAll(); 
    } 

vor dem Start jede neue Ebene, aber es hat immer noch nicht helfen. Ich habe auch versucht mit:

this.state.start('anyLevel', true, false); 

aber erwies sich als nutzlos. Der Debugger zeigt keine Fehler an, was syntaktisch bedeutet, dass das Programm korrekt ist, aber ich verstehe den Mechanismus nicht richtig.

Vielen Dank im Voraus.

Antwort

1

Zunächst einmal, wenn ich ein levelbasiertes Spiel mache, würde ich nicht empfehlen, jedes Level in einen separaten Status zu setzen, siehe Antworten dazu here und here.

Other than that, habe ich immer verwendet nur state.start() wie Sie auf dem Laufenden und es funktioniert gut, so etwas wie dieses:

// from level select state, switch to game state.. 
this.game.state.start('MyGameState'); 

// ..and from game state, switch back to level select state 
this.game.state.start('MySelectState'); 

Also, welche Fehler oder unerwartetes Verhalten bekommen Sie? Vielleicht treten Ihre Probleme auf, weil die Objektvariablen, die Sie in diesem Zustand verwenden, nicht mit diesem Zustand "verbunden" sind? Ich meine, die Variablen Sprite und Feind usw. werden außerhalb des Staates erstellt oder sind sie Teil des Bundesstaates wie im folgenden Code?

Btw beachten Sie, wie Sie einfach den aktuellen Zustand zurücksetzen können, indem Sie es einfach starten. Das Starten eines Zustands löst die create()-Funktion erneut aus, um die Variablen "Sprites" und "Feinde" zu bereinigen und zu aktualisieren. Ich bin mir nicht ganz sicher, wie das funktioniert, aber ich habe immer angenommen, dass der JavaScript-Garbage-Collector sich darum kümmert.

+0

Danke für die Beratung auf Multi-Level-Spiele. Aber was ist der richtige Weg, um einen alten Staat in Phaser zu beenden, während er in einen neuen Staat eintritt? Muss ich alles in shutDown() manuell zerstören? – RDN

+0

Interphase 1 verfügt über ein Zustandsverwaltungshandbuch, das den Status "Herunterfahren" abdeckt. Dort erklärt er, dass Phaser für die meisten seiner eigenen Bereinigungen zuständig ist. Außerdem: "Wenn Ihr Spiel auf einer externen API basiert, dann möchten Sie vielleicht alle offenen Verbindungen schließen. Wenn es benutzerdefinierte Spielobjekte gibt, die Sie mit komplexeren Einstellungen erstellt haben, sollten Sie sie auch hier zerstören, um zu stoppen Sie bluten in den nächsten Zustand über. " (S. 64) Also sollte es in den meisten Fällen in Ordnung sein, es einfach sein zu lassen. –

Verwandte Themen