成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

原創
移動開發 iOS
我們都知道Objective-C和Cocoa語言可以開發iOS應用,但是一年前,蘋果決定在iOS系統上使用Lua語言。Wax框架的想法很簡單:凡是Objective-C能做的,Lua也能做!考慮使用像Lua這樣一門簡單而高效的編程語言,構建原生iPhone應用程序有許多充分的理由,而本文將深入探討Wax具有的一些好處,同時演示把Lua與Xcode 4和iOS軟件開發工具包(SDK)集成起來必不可少的實際步驟。

【51CTO獨家譯文】2011年6月的編程語言排行榜Lua語言一軍突起,一舉進入前十名。這與一年前蘋果決定在iOS系統上使用Lua語言密不可分。但是,你了解如何用Lua語言在iOS上開發應用嗎?51CTO將向各位介紹Lua語言的iOS應用開發框架——Wax,其中在iOS平臺上無比火爆的《憤怒的小鳥》就是由Lua語言用Wax開發的。全文共分兩部分,***部分51CTO將帶您深入探討Wax具有的一些好處,同時演示把Lua與Xcode 4和iOS軟件開發工具包(SDK)集成起來必不可少的實際步驟。第二部分51CTO將逐步介紹如何用Wax構建一個簡單的應用程序,顯示Twitter上的當前趨勢話題列表,可以用按鈕來更新內容。

Wax框架及憤怒的小鳥

Wax是什么?

Wax for iPhone這種框架在開發時,旨在把Lua腳本語言和原生Objective-C應用編程接口(API)結合起來。這意味著,你可以從Lua里面,使用任何和全部的Objective-C類及框架。

從技術上來講,Wax結合了Objective-C類和原生C代碼。Lua語言嵌入了C語言,然后Objective-C類并入到其中。

為什么使用Wax?

Wax是免費的、開源的。與其他一些基于Lua的移動開發解決方案不同,Wax是個開源框架,只需要你花一點點時間就可以上手,不需要花錢。不喜歡Wax的工作方式,或者發現實施方面的缺陷?源代碼可免費獲取,你總是可以改動源代碼,以滿足自己的需要。

可以利用原生API。這意味著,為教Objective-C而編寫的教程很容易由Lua for 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字符串和Lua整數,Wax會為你搞定轉換工作。這種轉換功能強大,甚至可以處理復雜的Objective-C特性,比如選擇器。

你可以利用所有上述特性。不需要精挑細選。你獲得所有特性!#p#

OK,實在太棒了!我該如何安裝Wax?

首先你需要Xcode和iPhone SDK。要是你還沒有這些東西,趕緊弄一份!

用Xcode創建項目

我們先創建一個新的“基于Windows的項目”,名為“WaxApplication”。別忘了把設備設置成iPhone:

WaxApplication

WaxApplication

通過Finder瀏覽到你保存該項目的文件夾。創建三個新的文件夾:wax、scripts和Classes。你的文件夾看起來應該像這樣:

通過Finder瀏覽到你保存該項目的文件夾

設置Wax(***部分,處理文件)

首先,下載源代碼的壓縮包。Wax放在GitHub上(https://github.com/probablycorey/wax),那樣下載源代碼就很容易。從這里下載壓縮包。

現在,解壓縮剛下載的文件。瀏覽到剛解壓縮的文件夾。它會有“probablycorey-wax-124ca46”之類的名稱。

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

解壓縮剛下載的文件

現在,執行下列操作:

◆拷貝lib和bin文件夾,把它們粘貼到位于WaxApplication項目文件夾里面的wax文件夾。

◆將xcode-template/Classes/ProtocolLoader.h拷貝到WaxApplication項目文件夾。

◆拷貝xcode-template/scripts/文件夾,將它放到WaxApplication項目文件夾里面。

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

你的屏幕

你的屏幕應該看起來像這樣:

設置Wax(第二部分,配置項目)

現在用Finder選擇Classes、scripts和wax文件夾,把它們拖入到Xcode項目中。把它們放到顯示“Wax Application”和“1 target, iOS SDK X.X”的那個條下方。不要勾選顯示“Copy items into destination group’s folder(if needed)”的復選框。點擊完成。

現在點擊顯示“Wax Application”和“1 target, iOS SDK 4.3”的那個條。接著采取下列步驟:

◆在右邊窗格中,尋找“Targets”標題,點擊“WaxApplication”。點擊“Build Phases”(構建階段)選項卡。點擊“Copy Bundle Resources”(復制捆綁資源),清除所有lua文件。

◆在右下角,先點擊“Add Build Phase”(添加構建階段),再點擊“Add Run Script”(添加運行腳本)。

◆將Shell設成/bin/zsh

◆將Shell下面的文本區域設成“$PROJECT_DIR/wax/lib/build-scripts/copy-scripts.sh”。

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

打開main.m

改動main.m

在左邊窗格中,打開名為“WaxApplication”的文件夾。接下來,打開“Supporting Files”文件夾。接著,打開main.m,把文件的內容換成如下:

  1. / /這是發生奇跡的地方! 
  2. // Wax并不使用nib文件來裝入主視圖,一切在AppDelegate.lua文件里面完成 
  3. #import <UIKit/UIKit.h>    
  4. #import "wax.h"  
  5. #import "wax_http.h"  
  6. #import "wax_json.h"  
  7. #import "wax_filesystem.h"    
  8. int main(int argc, char *argv[]) {      
  9. NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];      
  10.  
  11. wax_start("AppDelegate.lua", luaopen_wax_http, luaopen_wax_json, luaopen_wax_filesystem, nil);  
  12.  
  13. int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");  
  14. [pool release]; 
  15. return retVal;  
  16. }  

別忘了保存文件!

刪除不必要的文件

刪除MainWindow.xib、WaxApplicationAppDelegate.h和WaxApplicationAppDelegate.m三個文件。打開“WaxApplication/Supporting Files/WaxPallication-Info.plist”,然后刪除鍵是“Main nib file base name”的那一行。#p#

測試安裝的Wax

按⌘↵(命令+回車鍵),或者按左上角的“Run”,就可以在模擬器中運行應用程序。要是一切正常,你會看到一個簡單的應用程序會說“Hello Lua!”。

要是你沒看到這個消息,檢查之前的步驟,看看有沒有步驟漏了。

查看Lua

展開Scripts文件夾,打開AppDelegate.lua。你會看到運行該應用程序的Lua代碼。

你可能會先注意到,沒有語法高亮。遺憾的是,對于Xcode中的Lua語法高亮問題,我還沒有發現穩定的解決方案(是你發現了,請留言告訴我!)。

接下來你可能會注意到,沒有方括號,不過使用了像UIScreen和UIWindow這些類。那是由于你在使用Lua構建一個AppDelegate類;在蘋果和蘋果的代碼看來,你在使用Objective-C、構建Objective-C類!

方法名稱

你可能還注意到奇怪的方法名稱“colorWithRed_green_blue_alpha”。要是你熟悉Objective-C,就知道方法名稱可以有冒號。Lua中的函數名稱不能有冒號。為了補償這個差異,凡是Objective-C中隔開方法名稱的地方,在Lua中都換成下劃線。比如說:

Objective-C中的colorWithRed:green:blue:alpha對應于Lua中的colorWithRed_green_blue_alpha。

Objective-C 中的selectRowAtIndexPath:animated:scrollPosition:對應于Lua中的selectRowAtIndexPath_animated_scrollPosition

面向對象的模型

Lua的另一個問題是,它沒有像Objective-C那樣的繼承體系。Lua中根本沒有類。為了克服這個問題,Wax突出顯示了放在每個Wax Lua文件最前面的一個函數:waxClass。在默認的AppDelegate.lua中,這一行看起來像這樣:

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

想通過Lua創建一個Objective-C類,就要使用waxClass{“CLASS NAME”, “PARENT_CLASS”}這個函數。你添加到該Lua文件的所有之后的函數(在同一個文件里面)都會作為實例方法,自動添加到新的類。

AppDelegate.lua的這一行顯示,還可以定義你的“類”定義哪些協議。

雖然waxClass解決了定義Objective-C可以使用的類這個問題,但還是存在一個問題:由于Lua沒有類,它沒有像Objective-C那樣的動態“自”變量。為了克服這個問題,Wax自動將每個方法的***個變量作為類的當前實例。你可以發現,當你查看AppDelegate.lua中的“applicationDidFinishLaunching”時,***個變量是“自”變量,即使Objective-C版的這個方法只有1個變量。然而,如果你非得將類的當前實例作為每個方法的***個變量來傳送,就會很煩人,于是添加了一些語法上的便利(syntactical sugar)。不是使用“.”操作符在Lua中進行“方法”調用,而是使用了“:”操作符:

  1. local view = UIView.initWithFrame(CGRect(0, 0, 100, 100)) 

--以下一模一樣

  1. view:addSubview(someView)  
  2. iew.addSubview(view, someView)  

值得一提的另一個重要方面是,Wax不支持Objective-C屬性。Wax迫使Lua和Objective-C只與方法進行聯系。

-- 這不行

  1. someView.frame  

-- 你而是需要使用getter/setter方法

  1. View:frame() some 
  2. View:setFrame(someFrame)  

只用于Lua的變量

你可以使用點.操作符,為任何Objective-C對象創建成員變量。不像冒號:操作符(用于對Objective-C類/實例調用方法),點.操作符可以針對對象的Lua方面,動態創建成員變量(對象的Objective-C方面對這些變量一無所知)。在對象的生命周期之內,都可以使用成員變量。

輸出到控制臺

AppDelegate.lua還顯示了你如何可以編寫調試文本、輸出到控制臺。你可以使用函數“puts”。

內存管理

我之前說過,使用Lua的話,你根本沒必要分配、保留和釋放內存。你在調用任何初始化器之前,根本不需要調用內存分配。實際上,如果你這么做的話,程序可能會出現內存泄漏。

太棒了!接下來做什么?

你已經深入了解了專門針對Wax的Lua的基本知識,就可以準備編寫iPhone應用程序了!

這個教程的第二個部分,我們將只用幾行Lua,就可以編寫出擁有刷新按鈕的一個Twitter示例應用程序。

看完這個教程是不是你也有信心打造出自己的《憤怒的小鳥》呢?

小貼士

Lua程序設計語言 是一個簡潔、輕量、可擴展的腳本語言。Lua讀作/'lua/(嚕啊),是葡萄牙語中"Luna"(月亮)的意思。

Lua是一種輕量語言,它的官方版本只包括一個精簡的核心和最基本的庫。這使得Lua體積小、啟動速度快。它用標準C語言編寫并以源代碼形式開放,編譯后僅僅一百余K,可以很方便的嵌入別的程式里。和許多"大而全"的語言不一樣,網路通訊、圖形界面等都沒有默認提供。但是Lua可以很容易地被擴展:由宿主語言(通常是C或C++)提供這些功能,Lua可以使用它們,就像是本來就內置的功能一樣。事實上,現在已經有很多成熟的擴展模塊可供選用。

Lua的目標是成為一個很容易嵌入其它語言中使用的語言。大多數程序員也認為它的確做到了這一點。

很多應用程序使用Lua作為自己的嵌入式腳本語言,以此來實現可配置性、可擴展性。這其中包括大話西游II、仙境傳說、魔獸世界、戰錘40k、博德之門、軒轅劍外傳漢之云等,在移動領域***的便是《憤怒的小鳥》。

責任編輯:佚名 來源: 51CTO
相關推薦

2011-06-21 09:28:52

Wax下載WaxLua語言

2011-06-22 13:13:33

Lua

2012-08-29 09:50:05

憤怒的小鳥免費

2011-09-06 14:26:26

2011-05-04 10:53:46

打印機技巧

2013-12-08 20:32:32

WaxLua

2011-05-16 13:46:56

Angry Monst憤怒的小鳥父子開發組合

2014-04-15 15:37:31

憤怒的小鳥信息泄露

2012-08-31 16:58:37

2012-03-14 08:54:27

Flash

2012-03-23 09:29:51

憤怒的小鳥:太空Windows Pho

2012-02-29 09:42:25

2012-03-09 17:26:07

憤怒的小鳥憤怒的小鳥太空版

2011-06-16 09:07:24

憤怒的小鳥NFC

2011-05-23 08:59:36

憤怒的小鳥Rovio

2012-12-11 15:33:52

2011-05-19 10:34:47

Windows Pho微軟諾基亞

2012-06-14 14:42:42

JavaScript

2012-11-23 09:15:11

憤怒的小鳥

2011-04-22 10:26:04

憤怒的小鳥移動游戲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线精品一区二区三区 | 亚洲精品9999 | 免费看片在线播放 | 国产精品欧美一区二区三区 | 欧美三级电影在线播放 | 中文字幕av在线播放 | 国产亚洲成av人在线观看导航 | 麻豆国产精品777777在线 | 久久午夜电影 | 日本免费一区二区三区视频 | 中文字幕一区在线 | 久久精品一区 | 亚洲欧美在线视频 | 一级a性色生活片久久毛片 午夜精品在线观看 | 国产日韩欧美一区二区在线播放 | 欧美中文 | 一区二区三区成人 | 91精品国产色综合久久不卡98口 | 亚洲一区二区三区免费观看 | 成人在线免费视频 | 久久久av | 亚洲在线一区二区 | 波多野结衣一区二区 | 欧美激情一区二区三级高清视频 | 精品91av| 成人av一区二区三区 | 99久久国产综合精品麻豆 | 99久久精品国产毛片 | 久久久一区二区三区四区 | 91精品一区 | 亚洲日本中文字幕在线 | 一区二区三区四区在线视频 | 国产91久久久久久久免费 | 天天操夜夜操 | 91精品国产91久久久久久丝袜 | 一区二区精品视频 | 欧美成年黄网站色视频 | 色资源在线视频 | 中文精品一区二区 | 欧美综合久久 | jav成人av免费播放 |