加入RUN!PC粉絲團
最近新增的精選文章
 
最多人點閱的精選文章
 
 
精選文章 - 開發技術
分享到Plurk
分享到FaceBook
 
App開發新選擇—Corona SDK
文‧圖/王漢麟 2013/10/11 下午 06:02:07

  隨著App市場爆炸性的發展,如何快速開發出高品質的App也成為一個重要的議題。目前兩主流大行動裝置平台為Android與iOS,為了擴增市場與滿足使用者的需求,同時開發App於這兩大不同平台是勢在必行的。然而Android與iOS所使用的語言與開發工具全然不同,若想要兩者兼備代表著必須維護兩套不同的專案,無論開發、除錯或測試都會需要兩倍以上的心力。慶幸的事,目前市面上提供了許多跨平台的開發工具,讓使用者只需要撰寫一套程式碼就可以將App同時發佈於不同的平台。知名的跨平台開發工具包括Phone Gap、App Accelerator、Unity 3D、Adobe Flash等等。每個同的跨平台開發工具都有其特色,適合不同的開發者與開發不類型的App。而本篇文章將介紹一款跨平台的軟體開發工具-Corona SDK。雖然目前在台灣較鮮為人知,但其國外的社群已經茁壯到一定的程度,而其網路上的各種資源也是相當豐富。這款開發工具最強大之處在於可以快速開發出酷炫的的遊戲以及各種不同類型的App,關鍵在於其使用一套易於學習的語言Lua作為開發基礎,並且提供近千個強大API讓開發者可以輕易撰寫出複雜的特效或功能,我們將在接下來的段落中詳細介紹其優點與特色。

Corona SDK,不是啤酒
  Corona SDK對大部分人來說相當陌生,可能第一時間想到的是便利超商販賣的啤酒,其實Corona SDK在很久以前就已經引起了世界的注意,那是因為一位14歲的小男孩利用其撰寫了一個名為Bubble Ball的免費遊戲,該遊戲打敗Angry Bird並在iTunes Store蟬聯兩週下載量冠軍。這個消息讓眾人相當驚訝,因為開發App並不是一件相當容易的事,而一位14歲的小男孩居然可以透過Corona SDK寫出高品質的遊戲,也因此讓讓人們開始感到好奇Corona SDK究竟是什麼東西。
  Corona SDK是由兩位Adobe公司離職員工所創辦,他們都在曾Adobe公司擔任重要的角色,其中一位更是Flash Lite Team的首席工程師。他們離職後隨即在2007年成立Corona Labs,並在2009年發佈了Corona SDK 1.0,當時尚未有跨平台的功能,只能針對iPhone進行開發。一直到了2010年其發佈了Corona SDK 2.0以及Corona Game Edition Beta,開始可以支援跨平台並且提供各種方便撰寫遊戲的API。

Corona SDK的優點
1.簡單易學
  Corona SDK所使用的語言為Lua,而Lua是一套輕量級的腳本語言,本身語法相當簡易直覺,Corona SDK包裝了各種API讓使用者可以透過Lua語言呼叫直接使用。假設原生語言需要10行程式碼才能完成的事情,Corona SDK可以將這件事簡化到一行程式碼。少量程式碼的好處是讓開發者可以更專注於App內容的設計,而更少的程式碼也代表著更清楚易懂的程式架構與更少的除錯時間。

2.完善的API支援
  Corona SDK提供了各種完善的API讓開發者可以輕易的使用手機硬體的本身功能如:地理位置系統、加速度計、羅盤等等,而針對其他額外的功能如推播訊息、廣告、In App Purchase等等,Corona SDK通通做了完善的支援。甚至針對社群方面,也有Facebook的API可以呼叫。

3.強大的遊戲API
  Corona SDK最大的賣點就是其對遊戲功能的支援。開發者下載安裝完Corona SDK之後不需再做任何額外的環境設定即可開始使用其內建的功能開發遊戲。其支援的遊戲功能包括:物理引擎、Sprite Sheet、動畫、繪圖處理等等,而這些遊戲功能API的語法也相當直覺易用,對於快速開發遊戲而言是一大利器。

4.豐富的線上資源
  雖然Corona SDK的網路社群並沒有辦法和Android與iOS相提並論,但是官方對於社群的維護相當重視,在官網提供了一個討論版”Share Code”,讓資深的開發人員可以把自己撰寫好的Sample Code分享。該討論板大部分的Sample Code保持良好的品質與清楚的說明,讓初學者可以輕鬆的使用這些範例。當使用者碰到任何問題時,官方的也往往會在第一時間回應說明。

實戰Corona SDK
  接下來我們將透過範例程式碼來介紹Corona SDK的內容與特色,讀者可以透過簡單的範例了解Corona SDK的運作方式,以及其對遊戲方面的支援。下列範例中我們將先介紹Corona基本的語法與函式呼叫,接著將介紹Corona最強大的功能之一-物理引擎。

(1)基本功能
(1.1) Hello World
  不免俗的第一個範例程式還是Hello World,在Corona SDK精簡的於法之下,只需要一行程式碼即可完成:

local myTextObject = display.newText( "Hello World!", 50, 50, "Arial", 30 )
程式碼解析:
display是Corona SDK所提供的API,可以用來產生文字、圖案、線條、抓取螢幕以及各種針對顯示物件的操作,簡而言之就是負責處理與呈現有關的功能。而display.newText則會產生一個text物件,我們宣告一個區域變數myTextObject來指向這個新產生出來的物件,這樣之後才有辦法刪除或回收這個text物件。而display.newText這個方法當中第一個參數代表顯示的文字訊息,第二與第三個參數代表著X與Y座標的位置,第四個參數代表著字型,最後一個參數則代表著字型大小。下圖是執行測試後的結果,這樣就完成了最基本的Hello World。


(1.2) Text Color Changer
  接下來我們將Hello World範例程式增加一點變化性,只要使用者用手指點擊螢幕就可以隨機變換”Hello World”字體的顏色。

local myTextObject = display.newText( "Hello World!", 50, 50, "Arial", 30 )

function screenTap()
local r = math.random( 0, 255 )
local g = math.random( 0, 255 )
local b = math.random( 0, 255 )
myTextObject:setTextColor( r, g, b )
end

display.currentStage:addEventListener( "tap", screenTap )

程式碼解析:
在第3~8行我們宣告了一個函式screenTap(),用來處理螢幕點擊事件。screenTap()一接收到螢幕點擊事件,會先透過math.random隨機產生紅綠藍三種顏色的數值,並透過這些數值設定myTextObject的字體顏色。接著我們透過display.currentStage可以抓取到目前螢幕畫面,再利用addEventListner可以監聽點擊事件”tap”,當產生點擊事件時會自動呼叫我們所定義的screenTap()函式,這樣就完成了一個可以切換字體顏色的基本範例。參考下圖為輸出結果:


(2)物理引擎 Corona SDK最棒的功能之一大概就是物理引擎了,因為Corona SDK內建Box 2D這套物理引擎,開發者完全不需作額外的環境設定,透過幾行程式碼就可以實作出物理引擎的效果,接下來馬上透過範例來看如何使用物理引擎。

(2.1) Sky Faller
  這個範例中我們將會設定兩個擁有物理屬性的物件,分別是由上往下掉落的箱子以及靜止不動的地板。程式一開始箱子會在螢幕正上方,而物理引擎開始運作之後箱子便會因為重力而掉落,與地板接觸之後產生碰撞並滾落一旁。實作的程式碼如下:

local physics = require( "physics" )
physics.start()

local sky = display.newImage( "bg_sky.png" )

local ground = display.newImage( "bg_ground.png" )
ground.x = 160; ground.y = 445

physics.addBody( ground, "static", { friction=0.5, bounce=0.3 } )

local crate = display.newImage( "crate.png" )
crate.x = 180; crate.y = -50; crate.rotation = 5

physics.addBody( crate, { density=3.0, friction=0.5, bounce=0.3 } )

程式碼解析:
  在程式碼的第1~2行,分別代表產生一個可以控制物理引擎的物件並開始使用物理引擎。關鍵字requir代表產生一個類別物件,而require內的關鍵字”physics”是Corona SDK針對物理引擎所提供的API類別。而透過require(“physics”)產生物理引擎的物件之後,便可以進行各種物理引擎進行操作,如start、stop等等…。
  第4行與第6行則是透過display.newImage這個API來產生圖片物件,分別設定背景圖天空與地板。第7行則是設定地板圖片物件的位置,讓它處於螢幕下方,這樣箱子才可以由上往下墜落在其上方。第9行則是透過我們之前宣告的physics物件讓地板擁有物理的特性,而這邊的關鍵字”static”讓地板可以靜止不動,”friction”與”bounce”則可以設定地板的摩擦例與彈性。最後的在11~14行的部份我們則是產生了箱子的圖片物件,同樣地透過physics這個物件讓它擁有物理引擎特性。當一切設定完畢按下執行便可以看到箱子由上往下墜落並與地板碰撞彈跳的效果。


(3)實作小結
以上範例中,我們實作了Corona SDK的基本的操作以及其重要特色物理引擎,可以發現透過短短幾行程式碼Corona SDK就可以幫我們完成許多事情。若想透過原生的語言如Java、Objective C在15行內寫出一個物理引擎的範例,那幾乎是不可能的。因此Corona SDK在製作遊戲或者App方面,的確提供了一個更快速的管道。

Corona SDK的美中不足
  雖然Corona SDK有許多優點與特色,但仍然有一些待改善的地方。第一點是Corona SDK沒有自己的整合開發環境,通常開發Lua都是透過簡單的文字編輯器,因此沒辦法進行自動編譯除錯,往往只能在執行期才能知道錯誤的地方。第二點依然與開發環境有關,Corona SDK沒有辦法透過傳輸線直接執行於手機裝置,若想要實機測試,只能先將程式碼透過佈署的方式編譯成.apk或.app再安裝於手機裝置。而佈署時必須與期官方網站連線認證使用者身分,這將導致在沒有網路的情況下將無法實機測試App。

結論
  Corona SDK是一套簡單易學的跨平台開發工具,對於想要快速開發遊戲的開發者來說是一個非常棒的選擇。其簡易的語法與強大的API可以幫助開發者在最短時間內開發出酷炫的遊戲或各種類型的App。使用Corona SDK開發App不用擔心其對於裝置操作方面的支援,因為不管是任何裝置的操作如加速度計、地理位置系統、指南針等等其都有良好的支援。Corona SDK另外也支援In App Purchase、廣告、Facebook等等額外的功能,整體來說Corona SDK在功能性支援方面來講有接近滿分的表現。其美中不足之處在於缺乏專屬的整合開發環境,也無法透過傳輸線直接在實機執行測試,這些都是Corona SDK必須加強改善的地方。



本文作者王漢麟現服務於資策會智慧網通系統研究所