999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Lua動態腳本語言Cocos2d—x應用開發的技術研究

2015-05-30 10:48:04馬超馬佳琳
軟件工程 2015年8期

馬超 馬佳琳

摘 要:Lua腳本語言技術給Coco2d-x開發,帶來了新的天地。通過Lua腳本語言開發Cocos2d-x應用,擺脫了C/C++開發的繁瑣代碼,使得開發變得快速高效又能同時在多個平臺運行,Lua腳本語言的可拓展性,可以使它很好的集成在應用程序中。同時Lua語言在開發成為控制器??刂茟贸绦虻倪壿嫸鳦oco2d-x之提供顯示功能和跨平臺功能。這樣開發不僅可以動態修改客戶端BUG,而且還能動態更新應用內容避免了更新帶來的客戶流失。Lua語言免費、小巧、快速易移植降低了開發成本又保證了應用性能。

關鍵詞:Coco2d-x;動態更新;Lua;跨平臺開發

中圖分類號:TP368.1 文獻標識碼:A

Abstract:The Lua scripting language technology has brought the new heaven and earth for the development of Coco2d-x.Through the Lua scripting language development Cocos2d-x application,get rid of the tedious code of C/C++ development,makes the development of fast and efficient and can run on multiple platforms at the same time,the Lua scripting language can expand sex,can make it a good integration in the application.At the same time the Lua language become controller in development.Control the application logic and Coco2d-providing display functions of x and cross-platform features.Such development can dynamically modify the client not only bugs,but also dynamic update application content to avoid the update of customer churn.Free,small,fast,easy to transplant the Lua language reduces the development cost and guarantee the application performance.

Keywords:Cocos2d-x;dynamic updating;Lua;cross-platform development

1 引言(Introduction)

Cocos2d-x是基于C++語言的移動端應用程序開發的開源框架。Cocos2d-iPhone項目的C++版本[1]。Cocos2d-x開發框架用C++語言重寫了Cocos2d開發框架從而實現應用開發跨平臺,在跨平臺移動端應用開發中Cocos2d-x框架被大量使用[2]。其開發的手機應用,可以在C++或者Lua中編寫。Cocos2d-x項目能夠兼容iOS操作系統,Android操作系統,黑莓Blackberry操作系統等。在PC端Cocos2d-x開發框架支持的操作系統包括Linux操作系統、Mac操作系統和Windows操作系統等PC端操作系統,因此,Cocos2d-x能夠在PC端操作系統中可以進行編輯和調試使得其在開發中變得高效快捷[3]。

2 基于Lua動態腳本語言Coco2d-x應用開發的關鍵技術(The key technology of Cocos2d-x application development based on the dynamic scripting language Lua)

(1)Lua技術

Lua是一個小巧的動態語言。Lua動態語言的設計初衷,為應用程序開發提供訂制功能與靈活的拓展。作為腳本語言它具有輕量、可拓展、簡潔等特點[4]。因為C++語言與Lua腳本語言具有良好交互能力。可以復雜繁瑣的C++開發變為簡單快捷的Lua語言開發。

(2)Lua與C++交互技術

Lua動態腳本語言與C++語言的通訊分為兩部分,首先是Lua動態語言通過Lua Binding訪問C++語言中的類庫或者函數以及傳遞參數,其次分是C++語言回調Lua C API訪問Lua的函數以及傳遞參數。

(3)Cocos2d-x開發手機應用技術

在實際開發中,使用Cocos2d-x框架進行移動端應用程序開發,依賴其可以和平臺完美兼容,使其項目可以做到多個平臺一套代碼,多個平臺一個版本避免了多平臺版本不統一的尷尬。通過與之相配套的CocosStdioUI編輯快速生成plist文件可視化進行界面布局提高實際項目中的開發效率,讓應用開發變得更加迅捷高效開發。

3 基于Lua動態腳本語言Coco2d-x應用開發的應用

與實現(The use and implementation of Cocos2d-x

application development based on the dynamic

scripting language Lua)

3.1 Lua與C++的交互技術實現

在C++中初始化Lua:

Lua_State * L=lua_open(); //初始化Lua環境

void CCinitLua() {

lua_openlibs(L); //載入Lua全部標準庫

}

完成在C++來執行Lua文件。Lua被嵌入到C++程序中,起到一個黏合作用。而Cocos2d-x框架其強大的功能分別來自于不同的類庫。Lua動態語言在程序開發中作為整個應用程序的邏輯控制器,在開發中Lua腳本語言充當大腦而開發框架充當肢體。以消息機制為例,通過調用C++語言的函數達到,回調Lua動態語言函數。以C++繪制函數為例,C++通過繪制函數傳輸一個消息給Lua語言,當繪制函數進行重繪時也就在Lua語言中執行相同的函數。這樣就可以在書法簡練沒有類型的Lua中編寫C++代碼,省去了C++的復雜語法從而有擁有了C++的強大功能。通過這個方式就能夠實現其他事件機制。

動態腳本語言Lua調用C++接口時,進行參數傳遞,回調結果的獲取。需要把C++中函數位置通過指定的方式傳達給Lua語言。在Lua調用C++,C++從棧中找到交互的棧,從而獲取其中的參數,調用結束后將返回結果信息放入棧中。在當Lua語言中繪制函數被調用時,同時也調用了C++中做相應處理的函數,這樣動態語言Lua與C++的交互就是實現的。

3.2 Lua與Cocos2d-x交互

Cocos2d-x具體來說更像是一個類庫的合集其中把圖形渲染和多媒體播放甚至物理引擎,分解集合成一個lib。通過C++調用這個lib中的具體方法而實現快速的手機應用開發的框架。通過Lua動態語言嵌入到Cocos2d-x開發框架中,并與其良好的結合。達到了在腳本中開發跨平臺手機應用。

3.3 利用Cocos2d-x開發應用

目前移動端操作系統主要有iOS操作系統,Android操作系統。移動應用程序開發需要使用Cocos2d-x進行開發可以避免一款程序多套代碼的尷尬。

(1)利用Lua+Coco2d-x開發Android應用

通過Native Development Toolkit(NDK)我們可以在eclipse里面集成外部庫(比如Cocos2d-x),使用C/C++來編寫Android程序。這些庫被編譯成動態庫通過JNI(Java Native Interface)與Java Android體系程序進行交互。下面有兩種使用方法:

①獨立模式:直接在makefile中使用arm-linux-androideabi-g++。

②集成模式:使用$NDKROOT/ndk-build shell工具,它是一種高度可定制的makefile,專門為NDK庫所設計的。

首先修改Anroid/jni/Android.mk中文件如下:

LOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)subdirs:=$(addprefix $(LOCAL_PATH)/http://www.machaoblog.com/../,$(addsuffix /Android.mk, \

cocos2dx\CocosDenshion/android\lua/proj.android/jni\))subdirs+= $(LOCAL_PATH)/pyramid/Android.mk

include $(subdirs)

修改jni\Application.mk文件:

APP_MODULES:=cocos2d cocosdenshion lua game

在android\src\org\cocos2dx\xx\x\.java中修改:

static {

System.loadLibray("cocos2d");

System.loadLibrary("cocosdenshion");

System.loadLibrary("lua");

System.loadLibrary("game");

}

(2)利用Lua+Coco2d-x開發iOS應用

在Mac操作系統終端中填入:

cd $COCOS2DX_HOME

sud./install-templates-xcode.sh-u

在Cocos2d-x框架安裝成功以后在Xcode中會出現新的Cocos2d-x模板選擇即可創建新的工程。由于lua語言不能直接與Objective-C交互,所以我們使用Lua Bingding和C/C++交互。同時C++和Objective-C可以混編,使用C++可以直接調用Objective-C,讓C++作為Lua和Objective-C交互的橋梁(圖1)。

(3)Lua開發應用

我們通過用Lua動態語言創建場景、層、精靈來實現應用中的一個通過用戶觸摸圖片跟隨用戶手指移動的功能。

Mc_Scene=cocos2d.CCScene.node()

Mc_Layer=cocos2d.CCLayer.node()

Mc_Scene:addChild(Mc_Layer)

Mc_Sprite=cocos2d.CCSprite:SpriteWithFile

("machao.png")

Mc_Layer:addChild(Mc_Sprite)

SceneSize=cocos2d.CCDirector:shareDirector:getWinSize()

Mc_Sprite:setPosition(cocos2d.CCPoint(SceneSize.width*0.5,SceneSize.height*0.5))

Mc_Layer.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHBEGAN,"btnTouchBegin")

Mc_Layer.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHMOVED,"btnTouchMove")

Mc_Layer.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHEND,"btnTouchEnd")

Pointbegin=nil

Function btnTouchBegin(e)

Local v=e[1]

Local pointMove=v:locationInView(v:view())

pointMove= cocos2d:CCDirector:sharedDirector():covertoGL(pointMove)

Mc_sprite:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y))

End

Function btnTouchMove(e)

Local v=e[1]

Local pointMove=v:locationInView(v:view())

pointMove= cocos2d:CCDirector:sharedDirector():covertoGL(pointMove)

Mc_sprite:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y

End

Function btnTochMove(e)

Cocos2d.CCLuaLog("T_end")

end

CocoDenshion.SimpleAudioEngine:shareEngine():playBackgroundmusic("background3.mp3",true)

CocoDenshion.SimpleAudioEngine:shareEngine():preloadEffect("effect1.wav")

Cocos2d.CCDirector:shareDirector():runwithScnen

(Mc_Scene)

Cocos2d.CCLuaLog("腳本運行結束")

4 結論(Conclusion)

本文使用Lua動態語言進行移動應用程序的設計與開發,把靈活高效的腳本語言應用到移動端應用程序開發,通過其良好的嵌入能力與Android平臺和iOS平臺結合,利用Cocos2d-x進行應用開發。Lua動態語言能使應用程序的邏輯和與前端視圖完全剝離開,不僅大大減少的應用程序的開發周期還使其具有客戶端動態更新的功能,又通過Cocos2d-x開發框架與多平臺相兼容,降低了開發成本。同時也降低了應用程序的復雜程度,增加了代碼的可復用性。

參考文獻(References)

[1] Jayant Varma.Lua實戰:IOS游戲開發[M].北京:人民郵電出版社,2014:77-78.

[2] 劉劍卓.Cocos2D-X游戲開發技術精解[M].北京:人民郵電出版社,2013:53-54.

[3] 滿碩泉.Cocos2D-X權威指南[M].北京:機械工業出版社,2010:26-27.

[4] Ierusalimschy R.Progarmming in Lua[M].北京:電子工業出版社,2006:141-143.

作者簡介:

馬 超(1991-),男,本科生.研究領域:計算機科學與技術.

馬佳琳(1972-),女,碩士,教授.研究領域:計算機科學與技術.

主站蜘蛛池模板: 欧美日韩一区二区在线免费观看 | 极品私人尤物在线精品首页 | 久青草网站| 99久久精品国产精品亚洲| 在线观看免费AV网| 精品国产aⅴ一区二区三区| 亚洲伊人久久精品影院| 国产亚洲欧美在线专区| 波多野结衣中文字幕一区| 国国产a国产片免费麻豆| 精品久久久久成人码免费动漫| 91网址在线播放| 日本人妻丰满熟妇区| 狠狠色综合网| 亚洲第一视频网站| 中文字幕无码制服中字| 香蕉伊思人视频| 精品一區二區久久久久久久網站| 凹凸精品免费精品视频| 18禁色诱爆乳网站| 午夜限制老子影院888| 国产成人乱无码视频| 中文字幕资源站| 真人免费一级毛片一区二区| 国产亚洲精| 欧美亚洲国产日韩电影在线| 九九视频免费在线观看| 制服丝袜国产精品| 亚洲欧洲日韩综合| 亚洲精品无码抽插日韩| 午夜a视频| 四虎国产精品永久一区| 国产视频欧美| 欧美午夜视频在线| 黄色网页在线观看| 伊人久久婷婷五月综合97色| 亚洲婷婷在线视频| 天天色天天综合| 午夜精品区| 色有码无码视频| 在线免费看片a| 久久久久无码国产精品不卡 | 97狠狠操| 91最新精品视频发布页| 一级福利视频| 99re在线免费视频| 国产精品va| 天堂成人在线| 精品一區二區久久久久久久網站| 大陆精大陆国产国语精品1024| 亚洲第一网站男人都懂| 国产亚洲精品va在线| 国产欧美又粗又猛又爽老| 久久久波多野结衣av一区二区| 国产欧美又粗又猛又爽老| 午夜天堂视频| 一级毛片基地| 欧美一区二区啪啪| 97色婷婷成人综合在线观看| 成人国产精品视频频| 在线免费a视频| 91久久性奴调教国产免费| 影音先锋亚洲无码| 国产精品内射视频| 欧美成人午夜影院| 无码综合天天久久综合网| 日韩 欧美 小说 综合网 另类| jizz国产视频| a毛片基地免费大全| 粉嫩国产白浆在线观看| 精品无码一区二区在线观看| 成人国产精品网站在线看| 99色亚洲国产精品11p| 日本午夜影院| 国产精品嫩草影院视频| 国产精品一老牛影视频| 91久久国产热精品免费| 五月激情婷婷综合| 永久在线播放| 免费一级无码在线网站 | 日韩免费视频播播| 亚洲精品国产综合99久久夜夜嗨|