2015-04-08 43 views
0

我想通過一個函數切換到相位器中的主菜單狀態,但無法讓它工作。以下是我的代碼片段。最終函數在game.js文件中的更新函數中調用。如何在相位器框架工作中切換狀態?

end: function(){ 
    player.kill(); 
    ltext.setText("Over!!"); 
    this.state.start('Menu'); 
}, 

回答

1

您最好不要從更新函數調用此函數。

相反,你可以在更新功能的精靈或按鈕事件處理程序等

我測試game.state.start(「XX」)把它和它的工作如預期。

window.addEventListener('load', function(){ 
 
\t var game = new Phaser.Game(500, 190, Phaser.CANVAS, '', { 
 
\t \t create : function (game) { 
 
\t \t  var textStyle = { font: "14px Arial", fill: "#ffcc00" }; 
 
\t \t  game.add.text(60, 40, 'Phaser HTML5 Game Engine', textStyle); 
 
\t \t  game.add.text(60, 70, 'This is state 1', textStyle); 
 
      
 
\t \t  var textStyle = { font: "14px Arial", fill: "#00ff00"}; 
 
\t \t  game.add.text(200, 130, 'Pointer here to enter state2', textStyle); 
 
\t \t  var graphics = game.add.graphics(0, 0); 
 
\t \t  graphics.beginFill(0x00ff00); 
 
\t \t  graphics.drawRect(200, 80, 50, 50); 
 
\t \t  graphics.endFill(); 
 
\t  }, 
 
\t \t update : function (game) { 
 
\t \t  var x = game.input.x, y = game.input.y; 
 
\t \t  if(x > 200 && x < 250 && y > 80 && y < 130){ 
 
\t \t \t  game.state.start('state2'); 
 
\t \t  } 
 
\t  } 
 
\t }); 
 

 
\t game.state.add('state2', { 
 
\t \t create: function (game){ 
 
\t \t \t var textStyle = { font: "14px Arial", fill: "#00ff00"}; 
 
\t \t  game.add.text(60, 40, 'Phaser HTML5 Game Engine', textStyle); 
 
\t \t  game.add.text(60, 70, 'Welcome to state 2', textStyle); 
 
\t \t } 
 
\t }); 
 
}, false);
body{text-align:center;margin:4px;padding:0;} 
 
canvas{vertical-align:middle; background-color:#000;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/phaser/2.3.0/phaser.min.js"></script>

在我更新功能
+0

我聲明功能不斷檢查,如果玩家已經取得了一定的成績,達到一個新的水平,但如果我不能使用狀態管理器更新功能那我該怎麼可能會去下一個級別? –

+0

我在更新函數中測試了state.start,它按預期工作。 也許你的代碼有其他問題。例如,** this **是或不是遊戲實例。 你能粘貼更多的代碼嗎? – cuixiping

+0

我在一個單獨的javascript文件中創建了我的另一個狀態,與同一個js文件中的不同 –