2013年4月26日 星期五

看 Corona SDK DEMO 學 API


Corona SDK 做 Mobile App 非常快速,這主要要歸功於 Corona SDK 裡完整的 API (Application programming interface),但是要學習 Corona API 最好的方法就是看它所附的 Sample Source Code. 所以我也打算從帶您看 Sample Source Code 開始來入門 Corona SDK。 

我們之前看過了 HelloWorld 的程式,今天我們來看這叫 FrameAnimation1 的簡單範例:

(PS:這個 project 的資料夾在 Corona SDK 路徑下面 /SampleCode/GettingStarted/FrameAnimation1/ 裡面)



local background = display.newImage( "grass.png" )

local radius = 40

local xdirection = 1
local ydirection = 1

local xspeed = 7.5
local yspeed = 6.4

local xpos = display.contentWidth * 0.5
local ypos = display.contentHeight * 0.5
local fruit = display.newImage( "fruit.png", xpos, ypos )

-- Get current edges of visible screen (accounting for the areas cropped by "zoomEven" scaling mode in config.lua)
local screenTop = display.screenOriginY
local screenBottom = display.viewableContentHeight + display.screenOriginY
local screenLeft = display.screenOriginX
local screenRight = display.viewableContentWidth + display.screenOriginX

local function animate(event)
 xpos = xpos + ( xspeed * xdirection );
 ypos = ypos + ( yspeed * ydirection );

 if ( xpos > screenRight - radius or xpos < screenLeft + radius ) then
  xdirection = xdirection * -1;
 end
 if ( ypos > screenBottom - radius or ypos < screenTop + radius ) then
  ydirection = ydirection * -1;
 end

 fruit:translate( xpos - fruit.x, ypos - fruit.y)
end

Runtime:addEventListener( "enterFrame", animate );



首先我們先執行一下這個程式,很簡單,就是一個在螢幕裡彈來彈去的移動蘋果。好,那我們先看看 Corona SDK 模擬器裡有些什麼?




我只介紹重要的部分,第一是最右邊那個 Window 選單拉下來,可以看到 View As,選到以後可以選擇你要模擬的硬體裝置,從 iPhone / iPhone4 / iPhone5 / iPad 到各種 Android 裝置,還有 Kindle Fire / Nook 等等。這個重要的是讓你有機會模擬不同裝置,在螢幕不同解析度時,App 會有什麼現象。依我的經驗 iOS 可以幾乎 95% 沒問題,但是 android 還是用真正的手機去 test 最保險。

第二是最右邊第二個 Hardware 選單拉下來,可以讓你把裝置打橫(由 portrait 變 landscape),或暫時停止運行 suspend 等等。

第三是 File 選單拉下來,有一個 build ,讓你選擇把 App 打包變成可以傳到裝置上的格式。在 android 時是 .apk 的檔案,在 iOS 時是 .app 的檔案。還有 File 選單最下面倒數第二項,Show Project Sandbox 項目,是讓你看看萬一有資料要存到裝置裡面,它模擬出一個儲存空間,讓你看到裡面存檔資料運作的情形。

接著,我們來看看『程式部分』,有兩個重點:第 35 行:
Runtime:addEventListener( "enterFrame", animate )

這個 API 呼叫是說,在 Runtime (也就是 LUA 程式執行起來之後),把 animate 這個 function ,在每個 "enterFrame" 訊息被系統收到時都執行一次。在沒有特別在 config.lua 裡面作不同設定的情形下,Corona 會以每秒三十個 Frame 的方式送這個 event 事件給你的程式,也就是說你的程式會像有個時鐘在跑一樣,每 1/30 秒就執行一次第 21 行 animate 這個 function。

另一個重點,第 32 行:
fruit:translate( xpos - fruit.x, ypos - fruit.y)

這裡, fruit 是一個 graphic 物件 object,這個物件有一個叫 translate 的方法,可以把它圖像的座標,從原來的位置移到 x 座標 = xpos - fruit.x, y 座標 = ypos - fruit.y 的位置去。

所以你就看到一個在螢幕裡彈來彈去的移動蘋果,很簡單吧。下回我們再看更精彩的。

待續...






沒有留言:

張貼留言