我是Phaser的新手,我一直在写一个多层次的益智游戏。
分层次地,状态是这样的 - 菜单 - > 1级 - > 2级 - >等
现在假设我正在玩第1级,无论是在完成等级之后还是在中间按下按键我都希望能够回到菜单状态并从那里开始我希望能够导航回到前进等级如果我想继续比赛。
最初我假设this.state.start( 'anyLevel')
可以带我到任何状态,状态会正常运行,因为自启动以来第一次运行。但导航回已经被解雇过的州一直是困难的。我需要的是能够回到以前的状态,状态应该像启动后第一次运行时一样。
我在某个地方读到了我需要在开始新状态之前通过shutDown()
清理状态并且我做了:
shutdown: function() {
this.game.world.removeAll();
}
在开始每个新级别之前,但它仍然没有帮助。我也尝试过使用:
this.state.start( 'anyLevel', true, false);
但事实证明没用。调试器没有显示错误,这在语法上意味着程序是正确的,但我没有正确掌握机制。
提前致谢。
答案 0 :(得分:1)
首先,在制作基于关卡的游戏时,我不建议将每个关卡置于单独的状态,请参阅有关here和here的答案。
除此之外,我总是像您发布的那样使用state.start()
并且它工作正常,所以像这样:
// 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');
那么你会得到什么错误或意外行为?也许你的问题就出现了,因为你在州里使用的对象变量并没有“连接”#34;到那个州?我的意思是,精灵和敌人等变量是在状态之外创建的,还是属于状态的一部分,如下面的代码所示?
GameState = function(game) {
// reference to main game object
this.game = game;
// object variables are part of this state
this.myplayer;
this.myenemies;
//..etc.
};
GameState.prototype = {
create: function() {
this.myplayer = this.game.add.sprite(100, 100, 'mysprites', 'smileydude');
this.myenemies = this.game.add.group();
//..etc.
},
update: function() {
},
//..
doResetCurrentLevel: function() {
this.state.start('MyGameState', true, false);
}
};
顺便提一下,你可以通过启动它来简单地重置当前状态。启动状态将再次触发create()
函数以清理和刷新精灵和敌人变量。我不完全确定这是如何工作的,但我总是假设JavaScript垃圾收集器会处理这个问题。