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

主站蜘蛛池模板: 欧美综合成人| 亚洲午夜国产片在线观看| 成人国产精品网站在线看 | 国产电话自拍伊人| 亚洲男人天堂2018| 91青青在线视频| 2020最新国产精品视频| 国产不卡一级毛片视频| 亚洲精品无码av中文字幕| 国产幂在线无码精品| 东京热高清无码精品| av在线人妻熟妇| 国产成人91精品免费网址在线| 曰AV在线无码| 无码福利视频| 51国产偷自视频区视频手机观看| 伊人久久大香线蕉影院| 亚洲视频a| 亚洲男人天堂2020| 99在线视频网站| 小说 亚洲 无码 精品| av手机版在线播放| 亚洲成人在线免费观看| 伊人婷婷色香五月综合缴缴情| 欧美视频免费一区二区三区| 亚洲Aⅴ无码专区在线观看q| jijzzizz老师出水喷水喷出| 91视频首页| 欧美亚洲国产一区| 欧美日韩午夜| 国产亚洲男人的天堂在线观看| 2020最新国产精品视频| 日韩性网站| 精品夜恋影院亚洲欧洲| www.91在线播放| 国产日韩欧美在线播放| 伊人网址在线| 日本成人在线不卡视频| 免费国产小视频在线观看| 国产一区二区免费播放| 97视频精品全国免费观看| 麻豆精品在线视频| 午夜三级在线| 亚洲成人免费在线| 国产微拍精品| 国产成人午夜福利免费无码r| 精品伊人久久久久7777人| 亚洲视频一区| 中文字幕在线免费看| 亚洲娇小与黑人巨大交| 亚洲欧美日韩成人在线| 中文字幕乱码中文乱码51精品| 久草青青在线视频| 在线欧美日韩| 天天激情综合| 影音先锋丝袜制服| 精品偷拍一区二区| 毛片网站在线播放| 日本不卡免费高清视频| 欧美在线观看不卡| 真人免费一级毛片一区二区| 在线精品自拍| 色婷婷电影网| 亚洲精品无码av中文字幕| 国产免费福利网站| 国产资源免费观看| 国产精品lululu在线观看| 成人综合网址| 在线无码私拍| 麻豆精品国产自产在线| AⅤ色综合久久天堂AV色综合| 亚洲AV无码一区二区三区牲色| 国产三级毛片| 国产色图在线观看| 亚洲中文字幕国产av| 亚洲高清中文字幕| 国产欧美日韩视频怡春院| 一本色道久久88| 亚洲无线一二三四区男男| 色妞永久免费视频| 成年看免费观看视频拍拍| 久久久久久久久久国产精品|