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と使用感は同じです。
効率が上がるだけだと思います。