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-),女,碩士,教授.研究領域:計算機科學與技術.

主站蜘蛛池模板: 成人夜夜嗨| 国产精品浪潮Av| 亚洲视频四区| 国产 在线视频无码| 亚洲VA中文字幕| 露脸真实国语乱在线观看| 欧美视频免费一区二区三区| 久久精品日日躁夜夜躁欧美| 啪啪免费视频一区二区| 久久国产高潮流白浆免费观看| 试看120秒男女啪啪免费| 无码又爽又刺激的高潮视频| 久久这里只有精品66| 亚洲无码精彩视频在线观看| 国产午夜不卡| 日韩性网站| 日韩av无码DVD| 99热亚洲精品6码| 456亚洲人成高清在线| 在线看片中文字幕| 幺女国产一级毛片| 99ri国产在线| 亚洲天堂视频在线观看| 欧美、日韩、国产综合一区| 天堂在线视频精品| 熟女视频91| 无码福利视频| 在线免费无码视频| 99久久国产综合精品女同| 99在线视频免费| 免费国产黄线在线观看| 亚洲福利片无码最新在线播放| 亚洲精选高清无码| 免费无码又爽又黄又刺激网站| 国产精品入口麻豆| 欧美精品啪啪一区二区三区| 日韩福利视频导航| 久久久亚洲色| 亚洲色图在线观看| 在线观看免费国产| 国产av色站网站| 日韩免费毛片| 91视频国产高清| 永久免费无码日韩视频| 成年人福利视频| 欧美a在线视频| 色成人综合| 在线综合亚洲欧美网站| 伊人无码视屏| 欧美国产菊爆免费观看| 亚洲综合香蕉| 久久九九热视频| 露脸一二三区国语对白| 亚洲人成网站色7777| 热热久久狠狠偷偷色男同| 特级aaaaaaaaa毛片免费视频| 亚洲无限乱码| 精品人妻一区无码视频| 亚洲精品成人福利在线电影| 久久久久久国产精品mv| 67194亚洲无码| www.亚洲色图.com| 全裸无码专区| 欧美激情首页| 国产一级二级在线观看| 超碰色了色| 国产在线精品99一区不卡| 国产91av在线| 久久天天躁夜夜躁狠狠| 亚洲高清无码久久久| 午夜日韩久久影院| 久久综合亚洲鲁鲁九月天| 91偷拍一区| 91精品国产一区自在线拍| 四虎精品国产AV二区| 国产精品亚洲а∨天堂免下载| 国产亚洲精品97在线观看| 国产精品视频系列专区| 亚洲人成网站在线播放2019| 成人伊人色一区二区三区| 久久精品国产免费观看频道| 成人福利在线视频|