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側でシンタックスエラー出して欲しいかも。