2010/3/22
Corona SDK - File I/O 檔案讀寫
在local端 進行檔案讀寫的動作。
先看一下完成後的介面:
由於File 存取必在實機上才能作用,所以我在畫面上半部弄了一個trace box,把一些測試用的訊號印出來看。
中間一條輸入框 input_txt ,給User隨便打字用,打完可存進檔案中
下方三個按鈕:
-Save 會把input_txt中的文字,及一串亂數數字,存進data.txt中
-Clear,會把data.txt中的內容清除,並寫上新的資料"new file, 00000"
-Remove,把data.txt這個檔案刪除掉。
範例code:
利用 file = io.open( path, mode )
即可開出檔案,mode主要有三種"r","w","a"
r : 只做讀取
w : 寫新檔(如果檔案不存在,下w就會建出一個新檔;若本來已有這個檔案,新寫的會覆蓋舊的)
a : 追加 (新寫的內容會加在原來舊資料之後)
另外還有"r+","w+","a+" 三種,但我實際試了一下,還找不出差異性在哪…以後再研究了。
在mode之後也可再加個"b",啟動binary模式,例如"rb", "wb" 這樣
要逐行把資料讀出,可用以下的寫法
要把table的東西逐行寫入檔案,則用以下的寫法
2010/3/18
Corona SDK - PHP+MySQL
我只是想弄個排行榜啊…
簡單測試一下如何上傳資料到PHP+MySQL的server上。
註:這邊只用最簡便的方式,以webPopup開網頁來與php溝通,所以應用層面有限。若要不透過網頁直接溝通的話,就再研究LuaSocket那部份的文件了。
首先先弄好介面:
.分數下面有個Random button,按了之後會亂數出現分數。做為等下要上傳用的成績。
.接下來是user自行輸入id,按Submit後,會連scroe及id一起上傳
.最下面有個High score是看成績用的。
main.lua:
上面可以看到,按submit之後,就會開webPopup連 "addData.php?id=xxxx&score=12345" 來上傳成績,成功的話,會出現網頁:
頁面下方的Close按鈕可關閉webPopup,注意看該button的html code
寫資料沒問題後,接著是讀資料。一樣用PHP把資料呈現出來
php code:
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的東西
就視狀況看要用哪一種了。
2010/3/12
Corona SDK - Accelerometer
Accelerometer重力加速計,也就是一般俗稱的G-sensor
Corona SDK所提供的Accelerometer十分週全,並非只有三個重力計的指數而已。(不像某知名品牌… XD)
主要由兩種event取得
.orientation
.accelerometer
Orientation比較單純,是當手機擺放角度改變時,才會通知,適合用在像瀏灠器轉向時,網頁自動轉面的這種應用。Orientation可從event.type得知目前手機被擺成哪一面,共有六種可能性:
.portrait
.landscapeLeft
.portraitUpsideDown
.landscapeRight
.faceUp
.faceDown
範例
注意:faceUp, faceDown這兩種要在實機上能得到。
Accelerometer則是隨時監聽所有的變化,能取得sensor所有數值
.event.xGravity -- x軸重力值,範圍 1至-1
.event.yGravity -- y軸重力值
.event.zGravity -- z軸重力值
.event.xInstant -- x軸瞬間加速值,範圍 1至-1
.event.yInstant -- y軸瞬間加速值
.event.zInstant -- z軸瞬間加速值
.event.isShake -- 搖動,以true/false表示
x, y, zGravity比較單純,就是看手機目前的傾斜狀況來反映
x, y, zInstant則是瞬間加速值,平常得到的值都很小,但當手機有快速晃動、甩動時,才會表現出來
範例:
注意:Accelerometer及native.newTextBox要在實機上能作用。
補充:system.setAccelerometerInterval是sensor靈敏度之設定,可設10~100,數字愈大靈敏度愈高。需注意有時設太高會跑不動(app直接跳掉)
做一個小球滾來滾去的範例:
2010/3/11
Corona SDK - StatusBar
Corona SDK - Alert & Activity Indicator
native Alert 視窗及Activity Indicator控制
(*Activity Indicator就是平常loading時那個旋轉小菊花符號)
Alert
在Corona裏用native.showAlert就可以叫出系統的Alert視窗了
要注意是按鈕設定是以 { } 把要加的按鈕加進去(不限定二個)。
實際範例如下
這邊要注意的是加按鈕用的table,如上面的code中 {"取消", "好" }, 在Simulator中出現的樣子會是
按鈕是由右至左排列,但在實機上則是
實機是由左至右排列,與Simulator上是相反的,這點需要稍微注意一下。
在Corona裏Alert的設定邏輯是,不論按哪個按鈕,都會關閉視窗,並執行我們指定給它的function,如上範例則為"onComplete"這個function
在onComplete裏可從event.index取得被按到的按鈕index(從1開始),藉此可去設定不同的後續動作。
除了等user按按鈕外,也有指令可立即把Alert關閉掉
上面範例會在5秒後自動把Alert關閉掉,在此可順便看到onComplete中取得的event.action,若為"clicked"則表示是user按了某按鈕;若為"cancelled",則表示是由native.cancelAlert(alert)來關閉的
Activity Indicator
Activity Indicator的控制只有"顯示"、"隱藏"兩種設定,用native.setActivityIndicator(true/false)來達成
以下範例為一開始時出現Activity Indicator,在5秒後自動消失
Corona SDK - Button Event
Corona SDK的button基本操作很簡單,大致上只有Press及Release兩個Event,這是基於Corona SDK 提供的ui library中的Button 物件。
從Sample code裏找到ui.lua這個檔,copy到你的project目錄中,並在你 的main.lua裏第一行寫
之後便能調用Button物件,如下
從上面的code可看到, 在newButton時,設定default, over兩個圖,它就會自動做按下、放開換圖的動作,連mouseOut也會換圖。(但沒有mouseOver)
而onPress=及onRelease=則可指定兩個function給它做動作。如此便是最基本的button設定了。
除了用onPress, onRelease外,也可用onEvent一個function來實做, 如下
透過event.phase得知event type,便能利用onEvent做不同的控制
event裏除了phase外,也包含了觸發對象的id,如下範例
若想了解ui library裏button物件的運作原理,可打開ui.lua這個檔去研究。不過我大致看一下內容,似乎也沒什麼值得抓出來用的東西…
2010/3/10
Corona SDK - Basic Animation 基本動畫控制
2010/3/9
Corona SDK-基本sprite屬性操作
CoronaSDK basic sprite control from maso on Vimeo.
練習一下基本的sprite屬性操作
main.lua內容如下:
*註:此練習需配合ui.lua才行,在官方sample code中的"Movieclip"裏可找到
2010/3/8
Corona SDK 初試-Hello World
前言:
之所以會注意到CoronaSDK要從Adobe Photoshop 20週年活動說起,Russell Brown為了PS 20週年,找了Ansca Mobild team合作一個iPhone版的Photoshop 1.0.7復刻。影片如下
之後又google一下相關資料,找到這篇
Eating Our Own Dogfood: How we built the Photoshop 20th Anniversary App in Three Days
才知道這是用CoronaSDK開發,而且只花三天就移殖好,這點引起了我不小的興趣,決定找來試玩看看。
*順一提,原來Ansca Mobile是Adobe離職員工出來開的
*另外Flash Magazine這篇Mobile development alternatives,比較幾個目前已知的3rd iPhone開發工具,也可看看
先把相關資料蒐齊:
.Corona SDK 官網
.30天試用下載
.文件
.論壇
.Blog
.一些已在app store上的showcase
試用版抓下來後,照著GettingStartedGuide.pdf這分文件,就可以做出一個簡單的Hello World並丟進手機玩了。不過打包時會要求連上網路,這點有些小麻煩…
此外,一般iPhone開發工具要產生能丟進手機的測試檔時,都會要求填入iPhone Developer program的相關認証檔,corona sdk則不需要。猜想可能他是從xcode裏去抓,或是上網去check…。不過這樣倒是方便不少。
打開Corona simulator,立刻會跳出一個選檔案的視窗,此時選擇你要試的sample的資料夾(不是.lua檔哦),就可以看到simulator畫面了。
若要丟手機的話,開好Corona後,在上方的menu bar選File-> Open for build...,之後同上述步驟。但輸出前會多請你設定版號、要測的機子。之後就會build出 app檔。app檔直接拉進iTunes後同步即可。
*這邊因為我是JB過的iPhone,所以就直接拉了。我沒試過未JB的是否可以這樣用…
成功完成一次丟進手機的測試後,就可以把試用版裏包含的sample code一一丟進測試了。
玩Sample Code初步心得
.因為檔案小,預覽、打包、甚至傳進手機,速度都很快,這點不錯。
.圖形表現、Frame rate、效能表現良好 (on iPhone 3G)
.api 支援算高,除Multi-touch未支援外,很多一般app需要的api都有提供:GPS, Accelerometer, native web view, status bar control, camera, camera roll, read/write files, video player...等
(官方說法:multi-touch及新的game framework會在下一版支援)
.用Lua語法,好學易上手
.可用任何你熟悉的文字編輯器來開發
.沒有視覺化的IDE,在排Layout時會比較辛苦些。(要用coding方式來排layout)
.目前只有mac版,很多win的朋友無法來玩…(這影響此技術的推廣啊…)
Hello World動手做看看
快速弄一個Hello world,開一個資料夾,建一個main.lua的文字檔(存UTF8格式)
裏面寫
這樣就能生出一個Hello world了
若直接丟手機的話,會發現 icon是白的,且launch app時也是一片黑暗。此時可以在你的project folder內放一張320x480的Default.png,及 57x57的 icon.png,來做splash screen及icon圖。
Debug
要做類似Flash 上的trace也很容易。先關掉Corona Simulator,改開啟Corona terminal,接下來都一樣的步驟。coding時用print("這是一個測試") 就可以了。
訂閱:
文章 (Atom)