enchant.jsで任意のシーンを最前面に表示する関数と解説
明けましておめでとうございます
今年はじめての更新となりました。本年も、どうぞよろしくお願いします。
jsdo.itにスクリプトを投稿
次のスクリプトを投稿しました。
少し技術的な解説をします。
解説
配列のコピー
実装
//配列をコピー Array.prototype.clone = function(){ var arr = new Array();//新しい配列 for( var i = 0; i< this.length; i++ ) arr[i] = this[i];//コピー return arr; }
利用方法
var hoge = 配列名.clone();
関数内で新しく配列を作成し、コピー元の配列の要素をすべてコピーしています。
シーンを最前面に移動する
実装
//シーンを手前に表示する Game.prototype.forwardScene = function( scene ){ var beforeScenes = Game.instance._scenes.clone();//変更前のシーンスタックをコピー while( this.currentScene != this.rootScene )//rootScene以外の this.popScene();//シーンをすべてスタックから取り出す for( var i = 0; i < beforeScenes.length; i++ ) if( beforeScenes[i] != scene && beforeScenes[i] != this.rootScene )//手前に表示したいシーン以外を this.pushScene( beforeScenes[i] );//元通りスタックに入れていく this.pushScene( scene );//最後に手前に表示したいシーンをスタックに入れる return; }
利用方法
hogame.forwardScene(hogescene);
Game.instance._scenesはシーンのスタックになる配列です。
- Game.instance._scenesをコピー
- 全てのシーンをスタックから取り出し
- 最前面に表示するシーンとrootScene以外をスタックに入れ
- 最後に最前面に表示したいシーンをスタックに入れる
という手順でシーンの移動を行なっています。
ポップしていないシーンは絶対にプッシュしない
例えばRPGなどのゲームでメニュー画面のシーンを表示したあと、メニューを閉じる際にpopSceneを行わずに移動画面などのシーンをpushSceneで呼び出すと、不具合の原因になったりします。
上記にもありますが、スタックにあるシーンをpushSceneする事は避けましょう。