關於Corona
如果你正在做iOS應用,或者關注過iOS開發,那麼一定聽說過Corona這個名字。
在蘋果修改了app稽核原則,允許使用第三方語言開發應用之後,Corona,這個曾經只能在破解系統上玩一玩的項目終於被更多人所關注,售價也從99美元漲到了299美元,當然現在又降到了149美元.不過看看他長長的Showcase列表就不難發現,這也確實是一個值得關注的引擎。
簡單來說,使用Corona的優勢主要有這麼幾點:
◆不需要使用複雜的Objective-C,不需要經曆繁瑣的編譯過程,使用更加簡單的,解釋型的Lua語言來開發應用
◆可以用你的Windows PC來開發iOS應用,當然如果要發布到AppStore還是需要一台iMac或MacBook (Pro)
◆iOS與Android平台的完美融合,應用移植不再是噩夢
◆豐富的API以及第三方庫的整合,讓應用開發變得更加簡單快捷
開發方法
如果你已經下載安裝了Corona SDK,那麼應該也注意到了,在CoronaSDK目錄下只有一個Corona Simulator和一個Terminal,還有一個debuger,沒有編輯器。是的,Corona的開發還是主要信賴於代碼編寫,當然在Corona網站的Tools裡能夠找到圖形化的開發工具,也可以嘗試一下。
運行模擬器的方法也有三種:
◆直接運行Corona Simulator,一般在示範運行app的時候使用,你將看不到任何列印出來的錯誤資訊
◆運行Corona Terminal,這是日常開發最常用的方法,它將會開啟模擬器,同時會出現一個終端視窗用於顯示列印的調試資訊和錯誤資訊
◆運行debugger,這將會開啟模擬器和一個帶互動功能的終端,在需要調試時使用,當然你需要熟悉gdb之類的調試工具
當模擬器運行起來的時候,從File — Open找到你需要測試的app的main.lua並開啟,這時在模擬器視窗上會出現app畫面,同時終端視窗會出現列印資訊。就像這樣:
Hello World
學習的最好方法是實踐,所以讓我們從最簡單的一個例子開始,建立一個app。是的,所有的例子都是從“世界你好!”開始的。
使用一個你最喜歡的文字編輯器,建立一個文字檔,敲入以下內容
- print("Hello World")
然後把檔案儲存 為main.lua,注意app的主檔案必須是main.lua,最好是把這個app的所有相關檔案放到一個單獨的目錄下。一般情況下每個app都應該有其獨立的目錄,比如這裡我們就叫他Sample1。
然後按照上面所說的,在Corona Simulator中File –> Open找到剛剛儲存的main.lua檔案並開啟,如果一切順利的話,你將什麼也看不到。是的,什麼也看不到!不過你要是通過Simulator開啟的模擬器,那麼在終端視窗裡還是能夠看到些東西,就像下面這樣:
那個Hello World就是我們剛剛輸出的。
Simulator vs Terminal
剛剛我們的print(“Hello World”)語句確實產生了作用,不過這顯示不是我們所要的效果,我們希望的是能夠在app裡輸出一行文字,但是現在到了終端視窗裡面。那麼,模擬器與終端有什麼區別呢?
簡單來說,終端視窗主要是用來輸出調試/警告/錯誤資訊用的,雖然在這正式的app裡看不到,但對於我們的開發階段還是很有用的,我們不需要使用複雜的debugger就能夠瞭解程式現在啟動並執行怎麼樣了。
Hello World on the Simulator
如果要在模擬器介面上輸出文本,我們需要另外的函數,這些函數都來自於 Corona graphics library。
在這裡,我們可以這樣做:
- local textObject = display.newText("Hello World", 50, 50, nil, 24)
-
- textObject:setTextColor(255,255,255)
再次在模擬器上運行一下這個程式,你將會看到下面的結果:
是的,這正是我們想要的。關於上面兩行代碼的細節就不過多描述,如果你是一個程式員,這沒有什麼難的,如果你不是,好吧,lua語言確實不怎麼難。
需要注意一下的是display.newText和textObject:setTextColor,這兩個函數調用,一個用的是.號,一個用的是:號,這是lua語言的兩種函數調用方式,或者說:號調用其實是.調用的文法簡化形式,具體的描述還是需要通過lua手冊來瞭解。
使用Corona SDK的一個好處,或者說是使用lua這類動態語言的一個好處就是你可以很方便的看到修改後的效果,而不需要像Objective-C那樣經曆編譯-連結過程。當你修改了main.lua檔案,儲存它,這時Simulator會主動提醒你檔案已更新,是否需要重新載入,選“是”就能立即看到修改後的效果。當然,你也可以在運行過程中主動要求重新載入app,使用Command -R即可,不需要等待編譯,也不需要關閉模擬器再重新開啟。