2010/3/17

Corona SDK - Misc. 雜項筆記


寫著寫著,偶爾會發現一些語法或邏輯上的小重點,單獨寫一篇不太像樣,所以集中整理於本篇。



動態取名
在AS上,會用_root["mc_"+i]類似這樣的方式動態取對象名稱。在Corona裏則是_G["mc_"..i]這樣的寫法
(_G類似於_root,而有沒有this, parent這類的,我還沒試過)



function裏用到的所有變數需先宣告好
例如以下


buttonHandler裏用到了label_1,但label_1的宣告是在buttonHandler之後,這樣寫的話仍可正常build出程式,也能執行,但到了buttonHandler裏的label_1.text=event.phase就會有問題了,自這行之後的code就都會沒有作用。
發生此問題時會一直找不到錯誤,因為build code都顯示為正常。所以要改成:




native.newTextField listener補充
1.1的文件上對TextField只提到有listener,但未對listener的用法加以說明。
其listener可得到三種事件:began, submitted, ended,用法如下:




math.random()在device上測試時的問題
math.random()放到device上測試時,會發生一直取到一樣數字的問題。
例如我們下 math.random(10000),並寫一個button,每按一下就執行一次math.random(10000),把結果秀在畫面上。
在simulator上,都會正常地出現不規則的亂數。但在device上,就會依序出現1,1316, 7557, 4587, 5328....
就此看來似乎是沒什麼問題,但關掉app再開後,卻發現仍然是1,1316, 7557, 4587, 5328....
不論試幾次都是一樣的結果。

要解此問題,需在使用math.random之前,先用一次
math.randomseed( os.time() )
(*在程式開始處設定一次即可)

看起來似乎是設定不同的randomseed,才能得到不同的亂數,所以官方回筈是說用os.time()可讓app每次得到不同的randomseed。
就我實際測來,確實有改善問題,每次能得到不同的亂數。但時間相近時,卻會得到"相近"的亂數…
例如現在測第一次math.random(10000)得到"5884",關掉app後馬上打開再測,會得到"5889"
猜想是os.time()得到的數字相近的結果。這點暫時看來無解…不過至少這樣的math.random()還能堪用就是了…



關於for loop

lua也有類似於AS的for(var i in obj)的用法。不過目前我只於table中使用,其他的object是否也能使用,就要再試試看了。lua的寫法如下

上面i會是index名稱,k則是內容的值,也就是tb[i]的內容。(index會從1開始)

除了ipairs外,也可以用pairs,兩者差別請看下面的code

用pairs的話,會依序print出 1,2,3,4,a
用ipairs的話,只會print出 1,2,3,4 也就是只有index為integer的東西
就視狀況看要用哪一種了。


沒有留言: