this.runningWidgets = [];
//タイマーカウントを初期化
this.tickCount = 0;
- // pauseStage()が呼ばれたときにnullじゃなくなる
- this.stagePausedFunction = null;
+
+ // pauseStage()関連の配列。
+ this.stagePaused = false;
+ this.stagePausedFunctions = [];
+ this.stagePausedInitFunctions = [];
this.backgroundMusic = null;
//各オブジェクトの単位時間ごとの動作と再描画を行う
//単位時間ごとの動作
this.tickCount++;
- if(this.stagePausedFunction == null){
+ if(!this.stagePaused){
//ポーズしていなければ更新処理
if(this.runningStage){
//ステージ
}
}
// runningStage.timerTick() 内でpauseStage()された時、ここで再度判定しないとWidghetのtickが実行されてしまう
- if(this.stagePausedFunction == null){
+ if(!this.stagePaused){
//ウィジェット
for(var i = 0; i < this.runningWidgets.length; i++){
var w = this.runningWidgets[i];
}
} else{
//ポーズしているならば処理関数を実行
- this.stagePausedFunction();
+ this.stagePausedFunctions[0]();
}
}
},
- pauseStage: function(func){
+ // func : 停止中にtick毎に呼ばれる関数。
+ // initFunc : pauseが可能となった時に呼ばれる関数。指定しないと、その時点でpauseが不可能だったときに例外がおこる。
+ pauseStage: function(func, initFunc){
//ステージの実行を一時停止する。一時停止中、funcに指定された関数が毎tick毎に呼ばれる
- if(this.stagePausedFunction == null){
- this.stagePausedFunction = func;
+ if(!this.stagePaused){
+ if(!initFunc) initFunc = null;
+ this.stagePausedFunctions.push(func);
+ this.stagePausedInitFunctions.push(initFunc);
+ this.stagePaused = true;
return true;
} else{
- //ステージが一時停止中のfunc()の中から二重にpauseStage()を呼んではいけない
- throw "pauseStage calling doubled.";
+ if(!initFunc)
+ {
+ throw "pauseStage calling doubled.";
+ }else
+ {
+ this.stagePausedFunctions.push(func);
+ this.stagePausedInitFunctions.push(initFunc);
+ return true;
+ }
}
},
resumeStage: function(){
//ステージの実行を再開する
- if(this.stagePausedFunction != null) {
+ if(this.stagePaused) {
//必ずpauseStage()の引数に指定したfunc()の中から呼ばれる・・・はず。
- this.stagePausedFunction = null;
+ this.stagePausedFunctions.splice(0, 1);
+ this.stagePausedInitFunctions.splice(0, 1);
+ if(this.stagePausedFunctions.length == 0)
+ {
+ this.stagePaused = false;
+ }else
+ {
+ this.stagePausedInitFunctions[0]();
+ }
return true;
} else{
return false;
aGameStage.debugCanvas = null;
aGameStage.mainContext = null;
aGameStage.debugContext = null;
- this.stagePausedFunction = null;
+ this.stagePausedFunctions = [];
+ this.stagePausedInitFunctions = [];
+ this.stagePaused = false;
//画面上に表示されたすべてのWidgetを解放する
for(;this.runningWidgets.length>0;)