2017-06-21 18 views
1

私はPhaserを初めて使い、多レベルのパズルゲームを作成しています。メニュー - -Phaserの状態を終了し、以前の状態に戻す方法

は、階層的状態は、このような何かを行く>レベル1 - >レベル2 - >など

私はキーをバック押すと、今私は、レベル1のいずれかのレベルの完了後または途中で遊んでいたとし私はメニューの状態に戻ることができるようにしたいと思っています。私はプレーし続けるために前方のレベルに戻ることができるようにしたいと思います。

当初、私はthis.state.start('anyLevel')が私を任意の状態にすることができ、状態はブート時から初めて実行されるときのように正常に実行されると仮定しました。しかし、既に1度解雇された州に戻るのは難しいことが分かります。私が必要とするのは、以前の状態に戻ることができるようにすることであり、状態は起動後に初めて実行されるときと同じように動作するはずです。 私は新しい状態を開始する前shutDown()を経由して状態をクリーンアップする必要があることをどこかで読んで、私がやった:

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

すべての新しいレベルを開始する前に、それはまだ助けにはなりませんでした。私もまた試してみました:

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

しかし、役に立たなかったと証明されました。デバッガは構文的にプログラムが正しいことを意味するエラーを表示しませんが、私はメカニズムを適切に把握していません。

ありがとうございます。

答えて

1

まず、レベルベースのゲームを作成する場合は、各レベルを別の状態にすることをお勧めしません。回答はherehereです。あなたが投稿し、それが正常に動作よう

それ以外

、私はいつもちょうど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'); 

だからあなたはどのようなエラーや予期しない動作を得るのですか?状態で使用しているオブジェクト変数がその状態に「接続されていない」ため、問題が発生する可能性がありますか?私は、スプライトと敵などの変数は、状態の外で作成されている、またはそれらは下のコードのような状態の一部ですか?

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のガベージコレクタがこれを処理すると常に仮定しています。

+0

マルチレベルゲームに関するアドバイスをいただきありがとうございます。しかし、新しい州に入っている間、古い状態を終了する正しい方法は何ですか? shutDown()の中のすべてを手動で破棄する必要がありますか? – RDN

+0

Interphase 1には、「シャットダウン」状態をカバーするState Manager Guideがあります。フェーザーは、独自のクリーンアップの大部分を担当すると述べています。さらに、「あなたのゲームが外部のAPIに依存している場合は、開いている接続を閉じることもできます。作成したカスタムゲームオブジェクトがより複雑な場合は、ここでそれらを破壊して停止する必要があります彼らは次の州への出血を避けている」 (64ページ)ほとんどの場合、あなたはそれをただのものにするだけでいいはずです。 –

関連する問題