Titanium Mobile でRPG開発進捗34日目
本日は画面的な変更がないためスクショありません。
進捗としてはログを出力していた割り込み処理
setIntervalをシリアライズする処理を書きました。
これは一昔前に流行った高速化するテクニックですが
Titanium Mobile でも同じことが起きるかはわかりません。
ただ、割り込み処理を何個も創りだすのは
やっぱり厳しいんじゃないかと思いますので
一個の割り込み処理をcallerとして走らせておくのが
きっと良いと思います。
それではソースです。
XXは適当に書き換えてください。
/* * lib/eventloop.js * イベントループ */ XX.lib.eventloop = { // 各種変数 interval:(1000 / 60), count:0, funcCount:0, funcArray:[], timingArray:[], /* * イベントループ開始 */ start:function () { setInterval(function() { $EL.count++; for (var i = 0;i < $EL.funcCount;i++) { var func = $EL.funcArray[i]; if(!($EL.count % $EL.timingArray[i]) && func) func(); } }, $EL.interval); }, /* * 処理登録 */ registFunc:function (func, delay) { if (typeof func == "string") func = new Function(func); var id; for(id = 0;;id++) if (!this.funcArray[id]) break; this.timingArray[id] = Math.floor(delay / this.interval) || 1; this.funcArray[id] = func; if (this.funcCount == id) this.funcCount++; return ++id; }, /* * 処理登録解除 */ clearFunc:function (id) { id--; this.funcArray[id] = undefined; if (!((--this.funcCount) == id)) this.funcCount++; } } var $EL = XX.lib.eventloop;
使い方はstart呼んで、registFuncで割りこませる処理を登録します。
基本的にはsetIntervalと使用感は同じです。
効率が上がるだけだと思います。