Titanium Mobile でRPG開発進捗36日目

本日もビジュアル的な進捗はナシ。
前回のオブジェクトはTi.includeで利用するものだったのですが
世の中CommonJS準拠でrequire使うのが流行りらしいので
そういった形に乗り換えました。

/*
 * eventloop.js
 * イベントループ
 */
eventloop = {
	// 各種変数
	interval:(1000 / 60),
	count:0,
	funcCount:0,
	funcArray:[],
	timingArray:[],
/*
 * イベントループ開始
 */
	start:function () {
		setInterval(function() {
			eventloop.count++;
			for (var i = 0;i < eventloop.funcCount;i++) {
				var func = eventloop.funcArray[i];
				if(!(eventloop.count % eventloop.timingArray[i]) && func) func();
			}
		}, eventloop.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++;
	}
};
exports = {
	start:function() {
		eventloop.start();
	},
	registFunc:function(func, delay) {
		return eventloop.registFunc(func, delay);
	},
	clearFunc:function(id) {
		eventloop.clearFunc(id);
	}
};

利用方法は見れば分かる通りでございます。

var el = require("eventloop");
el.start();
el.registFunc(function() {/*処理1*/}, 100/*実行タイミングmsで指定*/);
el.registFunc(function() {/*処理2*/}, 200/*実行タイミングmsで指定*/);


で、今日書きたかったことはこんなことじゃない。
もっと強烈にドハマリすることがあったのです。


現在のTitanium Mobileではオブジェクトのコピーに対応していない
のではないかという疑惑。
試したところではObject.clone();が動く気配がない。
また当然のごとく、var foo = Object;すれば、参照が渡されるわけで
各マスターデータのオブジェクトからワークへのコピーが出来ないわけです。
今のところfor in でオブジェクトのプロパティ値をシコシココピーしてます。
誰か解決方法教えて...または時間が解決してくれるか。


あくまでもjavascriptでの実装は表面的なものなので
Obj-Cやjavaにっていう場面でcloneって厄介なものなのかもしれない。


そもそもObject.clone();なんてないので、自前で実装しましょう!

追記 2011/10/28

実機で動くように修正しました。
実機で動かない現象が発生し、しかたなく
Xcodeのconsoleからクラッシュ原因をしらべることに。
Parse error / SyntaxError が出ており
これは文法的におかしいところがあるということがわかりました。
で、すごーく簡単なろころが間違っていそうだと
よくよく見なおしたところ、オブジェクトの最後にセミコロンがなかった

eventLoop = {
}; ←ここ!
exports = {
}; ←ここ!


*おお!タイタニウムスタヂオよ!
 みのがしてしまうとは なさけない


としか言いようがない。
こういうのはTitanium Studio側でシンタックスエラー出して欲しいかも。