Posted at

createjs(0.7.1)のTimerFiredを完全に止める方法

More than 5 years have passed since last update.


スマフォ向けに描画が終わったらtickイベントをとめたい


イベント初期化

こんな感じでtickイベントが始まるとします。

var stage = new createjs.Stage($('canvas').get(0));

createjs.Ticker.addEventListener('tick',stage);

この状態ですとスペックの低いPCですとProfile>idleが10%ぐらいになり、

PCのファンが悲鳴をあげます。


イベント(描画)停止

createjs.Ticker.setPaused(true);

あるいは

createjs.Ticker.removeEventListener('tick');

とやることで描画更新(update layer tree)は止まります。

しかしこれでもidleは50%前後になってしまいます。

これはcreatejsの内部でsetTimeoutを呼び出し続けているためです。


イベントの完全停止

createjs.Ticker.reset();

//0.7.1だと以下のプロパティが初期化されずに再スタートできなくなる
//masterだと修正されているのでそのうちいらなくなるっぽい
createjs.Ticker._timerId = null;
createjs.Ticker._inited = false;

はじめmasterを見ていたのでなんで再初期化できないのかすっごく悩んだ。。


イベントの再初期化

createjs.Ticker.init();

createjs.Ticker.setFPS(15);
createjs.Ticker.addEventListener('tick',stage);
//Tweenも使っているのであれば以下も必要
//createjs.Ticker.addEventListener('tick',createjs.Tween);