やりたいこと
Phaser 3 でシーンの再起動を行う。
例えばゲームオーバーになったときにゲームのシーンをはじめからやり直すなど。
例としてPhaser 3チュートリアルのPart10を参考に行います。
コードのダウンロードやコメントなどは以下のページに記載しましたのでご参照ください。
Sceneのリスタート
スクリプト
以下をスクリプトを実行するとシーンが再実行されます。thisはSceneです。
そのためSceneを継承したクラスから呼び出すときも以下のスクリプトで実行できます。
(スクリプト中のthis.sceneはSceneクラスではなくScenePluginです。)
this.scene.restart();
何が起きるか
this.scene.restart()を呼ぶと、初回実行時と同様にpreload、createの順で呼ばれます。
ただしpreload、createの外で行われている初期化は行われません。
(Sceneを継承してクラスを作成した場合、メンバ宣言時の初期化やコンストラクタも呼ばれません)
Phaser3 Turtorialで使用してみる
チュートリアルでは爆弾に当たったときに入力不能になりますが、シーンの最初に戻るようにします。
爆弾に当たったときに呼ばれるhitBomb 関数の最後にthis.scene.restart(); を呼ぶように修正しました。
function hitBomb (player, bomb)
{
/*略*/
this.scene.restart();
}
結果、再度ゲームが始まるようになりました。
しかし入力ができず、ゲームが続行できません。
これは上にある”preload、createの外で行われている初期化は行われません。”ためです。
createの中で初期化されていない以下の2つの値も初期化するようにします。
function create ()
/*略*/
score = 0;
gameOver = false;
}
結果
シーンを再起動することができました。
コメント