當前位置:成語大全網 - 書法字典 - Ios開發憤怒的小鳥Lua語言:Wax框架詳解(壹)

Ios開發憤怒的小鳥Lua語言:Wax框架詳解(壹)

2011年6月,編程語言榜單Lua語言異軍突起,壹舉進入前十。這和壹年前蘋果決定在iOS系統上使用Lua語言是分不開的。但是,妳知道如何用Lua語言在iOS上開發應用嗎?Lua語言的iOS應用開發框架Wax將會介紹給大家,其中在iOS平臺上極為流行的《憤怒的小鳥》就是Lua語言用Wax開發的。全文* * *分為兩部分。第壹部分將帶您深入討論Wax的壹些好處,並演示將Lua與Xcode 4和iOS軟件開發工具包(SDK)集成的必要實際步驟。第二部分將逐步介紹如何用Wax構建壹個簡單的應用程序,在Twitter上顯示當前的趨勢話題列表,並使用按鈕更新內容。

蠟是什麽?

Wax for iPhone是壹個框架,旨在將Lua腳本語言與本機Objective-C應用程序編程接口(API)結合起來。這意味著您可以使用Lua中的任何和所有Objective-C類和框架。

從技術上講,Wax將Objective-C類與本機C代碼結合在壹起。Lua語言嵌入C語言,然後Objective-C類融入其中。

為什麽要用蠟?

Wax是免費和開源的。與其他壹些基於Lua的移動開發解決方案不同,Wax是壹個開源框架,只需要妳花壹點時間就可以入門,而且不需要妳花錢。不喜歡Wax的工作方式,或者發現實現上的缺陷?源代碼是免費的,您可以隨時更改源代碼以滿足自己的需求。

您可以使用本機API。這意味著為教學Objective-C編寫的課程可以很容易地由Lua為Wax修改和編寫。這也意味著您的應用程序看起來和感覺上總是像本機應用程序,但它的優勢是通過用Lua(壹種高效的腳本語言)編寫代碼來節省時間。

可以用Xcode。這意味著模擬器和設備部署很容易,不會輕易與未來的iOS版本中斷。

您可以使用所有現有的Objective-C庫。如果妳有壹個之前編寫的Objective-C類,妳可以在Lua中使用它而不用修改它——只需要把它放在Xcode中。Three20等圖書館也是如此。只要按照正常的指令添加庫,就可以使用Lua代碼訪問它們。

可以使用Wax Lua模塊。Wax內置了幾個Lua模塊,這使得異步HTTP請求和JavaScript對象註釋(JSON)創建/解析變得非常容易和快速(因為這些模塊是用C編寫的)。

不需要管理內存。不再需要擔心內存分配和其他事務。Wax為您處理所有這些。

Lua類型會自動轉換成相應的Objective-C類型,反之亦然。這意味著如果妳調用壹個需要NSString和NSInteger的方法,但是傳遞了Lua string和Lua integer,Wax會為妳做轉換。這種轉換非常強大,甚至可以處理復雜的Objective-C特性,比如選擇器。

您可以利用上述所有功能。妳不需要有選擇性。妳得到了所有的功能!

#p#副標題#e#

好,太好了!我如何安裝蠟?

首先妳需要Xcode和iPhone SDK。如果妳沒有這些東西,馬上去弄壹個!

使用Xcode創建項目

我們先創建壹個新的“基於Windows的項目”,名為“WaxApplication”。不要忘記將設備設置為iPhone:

通過Finder瀏覽到您存儲項目的文件夾。創建三個新文件夾:wax、scripts和Classes。您的文件夾應該如下所示:

凝固蠟(第壹部分,處理文件)

首先,下載源代碼的壓縮包。Wax放在GitHub上,很容易下載源代碼。從這裏下載壓縮包。

現在,解壓妳剛剛下載的文件。瀏覽到您剛剛解壓縮的文件夾。它會有壹個類似“大概是Corey-wax-124Ca46”的名字。

您的屏幕現在應該看起來像這樣:

現在,執行以下操作:

◆復制lib和bin文件夾,粘貼到WaxApplication項目文件夾下的wax文件夾中。

◆將xcode-template/classes/protocol loader . h復制到WaxApplication項目文件夾中。

◆復制xcode-template/scripts/文件夾,放入WaxApplication項目文件夾。

◆打開WaxApplication項目文件夾中的wax/lib/extensions/文件夾。刪除SQLite和xml文件夾,如下圖所示:

您的屏幕應該是這樣的:

凝固蠟(第二部分,配置項目)

現在使用Finder選擇類、腳本和wax文件夾,並將它們拖到Xcode項目中。把它們放在寫著“蠟應用”和“1目標,iOS SDK X.X”的欄下。不要選中顯示“將項目復制到目標組的文件夾中(如果需要)”的復選框。單擊完成。

現在點擊顯示“Wax應用”和“1目標,iOS SDK 4.3”的欄。然後采取以下步驟:

◆在右窗格中,找到“目標”的標題,然後單擊“WaxApplication”。單擊“構建階段”選項卡。單擊“復制捆綁包資源”清除所有lua文件。

◆在右下角,先點擊“添加構建階段”,再點擊“添加運行腳本”。

◆將Shell設置為/bin/zsh。

◆將外殼下的文本區域設置為“$ project _ dir/wax/lib/build-scripts/copy-scripts . sh”。

您的屏幕現在看起來像這樣:

改變主要的

在左窗格中,打開名為WaxApplication的文件夾。接下來,打開支持文件文件夾。然後,打開main.m,將文件內容更改為以下內容:

//這就是奇跡發生的地方!//Wax不使用nib文件加載主視圖。壹切都在AppDelegate.lua文件中完成# importuikit/ui kit . h # import " wax . h " # import " wax _ http . h " # import " wax _ JSON . h " # import " wax _ file system . h " int main(int argc,char * argv[]){ nsautoeleasepool * pool =[[nsautoeleasepoolalloc]init];wax_start("AppDelegate.lua ",luaopen_wax_http,luaopen_wax_json,luaopen_wax_filesystem,nil);intretVal = UIApplicationMain(argc,argv,nil,@ " app delegate ");【pool release】;returnretVal}

不要忘記保存文件!

刪除不必要的文件

刪除MainWindow.xib、WaxApplicationAppDelegate.h、waxapplicationappdelegate.m三個文件,打開“wax application/supporting files/wax alliance-info . plist”,然後刪除key為“主nib文件庫名”的那壹行。

#p#副標題#e#

測試安裝的蠟。

按(Command+Enter)或左上角的“運行”在模擬器中運行應用程序。如果壹切順利,您將看到壹個簡單的應用程序說“Hello Lua!”。

如果您沒有看到此消息,請檢查前面的步驟,看看是否有任何步驟遺漏。

查看Lua

展開腳本文件夾並打開AppDelegate.lua,您將看到運行應用程序的lua代碼。

妳可能會註意到,首先沒有語法突出。可惜我還沒有找到Xcode中Lua語法高亮問題的穩定解決方案(如果有,請留言告訴我!)。

接下來,您可能會註意到沒有方括號,但是使用了像UIScreen和UIWindow這樣的類。那是因為妳在用Lua構建AppDelegate類;根據蘋果和蘋果的代碼,妳在用Objective-C,在建Objective-C類!

方法名稱

妳可能還註意到了奇怪的方法名“colorWithRed _ green _ blue _ alpha blue _ alpha”。如果您熟悉Objective-C,您會知道方法名可以有冒號。Lua中的函數名不能有冒號。為了彌補這種差異,Objective-C中所有分隔方法名的地方都在Lua中加了下劃線。例如:

Objective-C中的ColorWithRed:green:blue:alpha blue:alpha對應Lua中的ColorWithRed _ green _ blue _ alpha blue _ alpha。

Objective-C中的selectrowatindexpath:animated:scroll position:對應Lua中的selectrowatindexpath _ animated _ scroll position。

面向對象模型

Lua的另壹個問題是它沒有Objective-C那樣的繼承系統,Lua中沒有類。為了克服這個問題,Wax突出了壹個放在每個Wax Lua文件前面的函數:waxClass。在默認的AppDelegate.lua中,這壹行如下所示:

waxClass{"AppDelegate ",protocols = { " UIApplicationDelegate " } }

如果想通過Lua創建Objective-C類,應該使用函數waxclass {"classname "," parent _ class"}。您添加到Lua文件(在同壹個文件中)的所有後續函數將作為實例方法自動添加到新類中。

AppDelegate.lua的這壹行顯示了您還可以定義您的“類”定義了哪些協議。

雖然waxClass解決了定義objective-c可以使用的類的問題,但是仍然存在壹個問題:因為Lua沒有類,所以它沒有Objective-C那樣的動態“self”變量,為了克服這個問題,Wax自動將每個方法的第壹個變量作為該類的當前實例。妳可以發現,在AppDelegate.lua中查看“applicationDidFinishLaunching”時,第壹個變量是“from”變量,盡管這個方法的Objective-C版本只有1個變量。但是,如果妳必須把類的當前實例作為每個方法的第壹個變量發送,那就非常煩人了,所以妳加了壹些語法上的糖。而不是使用“.”運算符在Lua中進行“方法”調用,使用“:”運算符:

local view = ui view . initwithframe(CG rect(0,0,100,100))

-以下內容完全相同

視圖:添加子視圖(someView)

另壹個值得壹提的重要方面是,Wax不支持Objective-C屬性。Wax強制Lua和Objective-C只接觸方法。

-那不行。

someView.frame

-您需要改用getter/setter方法。

view:frame()some view:set frame(some frame)

僅用於Lua的變量。

您可以使用點運算符為任何Objective-C對象創建成員變量。與冒號:操作符(用於調用Objective-C類/實例上的方法)不同,點。operator可以為對象的Lua方面動態創建成員變量(對象的Objective-C方面對這些變量壹無所知)。成員變量可以在對象的整個生命周期中使用。

輸出到控制臺

AppDelegate.lua還展示了如何編寫調試文本並將其輸出到控制臺。您可以使用“puts”功能。

內存管理

我之前說過,有了Lua,妳根本不需要分配、預留和釋放內存。在調用任何初始化器之前,不需要調用內存分配。事實上,如果這樣做,程序可能會出現內存泄漏。

幹得好!下壹步做什麽?

您已經深入了解了專門針對Wax的Lua基礎知識,並且已經準備好編寫iPhone應用程序了!

在本教程的第二部分,我們將用幾行Lua代碼編寫壹個帶有刷新按鈕的Twitter示例應用程序。

看完這個教程,妳有信心打造自己的憤怒的小鳥嗎?

技巧

Lua編程語言是壹種簡單、輕量級和可擴展的腳本語言。Lua讀作/'lua/ (Lu Ah),在葡萄牙語中是“Luna”(月亮)的意思。

Lua是壹種輕量級語言,它的正式版本只包括壹個簡化的核心和最基本的庫。這使得Lua體積小,啟動快。它是用標準C語言編寫的,以源代碼的形式開放。編譯後只有100 K多,可以輕松嵌入其他程序。不像很多“大而全”的語言,默認不提供網絡通信和圖形界面。但是Lua很容易擴展:這些函數是由宿主語言(通常是C或C++)提供的,Lua可以像使用內置函數壹樣使用它們。其實有很多成熟的擴展模塊可以選擇。

Lua的目標是成為壹種可以輕松嵌入其他語言的語言。大多數程序員也認為它確實做到了這壹點。

許多應用程序使用Lua作為自己的嵌入式腳本語言來實現可配置性和可擴展性。其中包括《奧德賽2》、《仙境傳說》、《魔獸世界》、《戰錘40k》、《博德之門》、《軒轅劍》等。移動領域最著名的是《憤怒的小鳥》。

#p#副標題#e#