cocos2dx绑定lua并进行代码测试

来源:互联网 发布:未来计价软件下载 编辑:程序博客网 时间:2024/06/02 03:04

   看了很多文章和介绍,但是还是一头雾水。之前做过2.x版本,也做过3.4版本。如今需要用lua,但是究竟怎样binding?光说不练假把式。

   关于tolua++的英文翻译可见这个地址:http://blog.csdn.net/ghosc/article/details/7479104(然并卵)

   关于OpenGL的介绍和tutorial可见这个地址:http://www.opengl-tutorial.org/zh-hans/beginners-tutorials-zh/(可以当饭后甜点)

   关于tolua++使用可见这个地址:tolua++实现分析,cocos2dx的lua绑定(佩服作者,写的很好)

   刚开始做这件事情的时候,面对很多很长的名字和指令,简直要疯掉,自己摸索着看代码,越看越乱。这些东西太抽象,没有在脑子里形成具体的概念,所以自己抓掉了很多头发。

   

那么,cocos2dx-lua 是如何启动的呢?示例:

   main.cpp—>SimulatorWin.cpp—>AppDelegate.cpp—>lua

   而在lua中的启动顺序如下说明:

   从main.lua开始:
Main.lua是Cocos2d-lua项目的默认入口,即项目启动时,首先执行这个文件。(我们也可以修改config.json文件的entry字段来配置入口文件)
main.lua中进行了几项操作:
a)把res和src两个文件夹添加到文件搜索路径。
b)读取Config.lua加载lua配置信息。执行Cocos.init,这个文件根据配置信息初始化Cocos2d-lua框架(require加载lua模块时必须使用”.”来代替路径中的”/”符号) 
c)创建App文件夹中的App对象,调用run函数,run函数可以有参数,用于配置第一个进入的场景,默认是MainScene。从App对象开始才是是码农朋友们的劳动场所,一般从这里开始添加游戏逻辑。 
Config.luaConfig.lua提供了几个字段用于配置项目,可以修改这些字段的值来达到某些效果: 
DEBUG字段:设置输出调试信息的等级,0为无,1为少量的,2为完全的。其实就是控制几个不同的print函数是否输出。
CC_USE_FRAMEWORK字段:设置是否使用quick框架,包括MVC框架。
CC_SHOW_FPS字段:是否显示FPS等显卡相关信息。
CC_DISABLE_GLOBAL字段:是否允许定义全局变量,具体可看此篇说明:
http://cocoslua.cn/2014/12/disable-global-var/ 
CC_DESIGN_RESOLUTION字段:设置在不同分辨率下,游戏分辨率的调整策略,具体可参考此篇教程:http://cn.cocos2d-x.org/tutorial/show?id=1434 
在执行cocos/init.lua的时候,就会根据上述配置信息,来配置项目。

Cocos-Lua项目自带的MVC框架
自带的MVC框架的基础代码在创建的项目的src/package/mvc中可以找到。这里边有三个文件AppBase.lua、init.lua、ViewBase.lua。
AppBase:算是MVC框架的管理角色,主要管理View对象,比如提供了一些接口用于切换View。 
ViewBase.lua:继承于2d-x的Node类型。但其中的ShowWIthScene接口会创建一个Scene文件,把View自身添加到这个Scene上,并命令全局显示这个Scene。
Init.lua:不用说,看字面就知道,这个用于初始化MVC框架。

基于MVC框架开始给我们的游戏添加逻辑:
MVC框架填充逻辑的地方默认在app文件夹中(res/app或者src/app)。
默认会在这个文件夹下生成MyApp.lua和Views文件夹,我们应该在views中为每个游戏场景添加一个继承自ViewBase的类,加载CocosStudio编辑出来的界面,处理交互、动画等界面逻辑,并调用models中的类处理游戏逻辑;此外我们还需要在这个文件夹下添加一个model文件夹,用来填写游戏的逻辑代码。



MVC具体游戏逻辑的文件结构
在MyApp.lua中,我们可以重写onCreate函数,在这里添加进入第一个游戏界面之前的处理逻辑,我们的示例游戏比较简单,不需要在这里做什么特殊处理。在onCreate执行完之后,紧接着会执行AppBase的run函数,这个函数在Main.lua中调用,这个函数有一个参数,用来决定进入的第一个View,如果不填写这个参数,默认会进入MainScene.lua文件。

主界面: 
MainScene.lua的代码如下:
--MainScene.lua

--创建一个MainScne类,继承ViewBase对象
localMainScene =class("MainScene",cc.load("mvc").ViewBase)
--重载onCreate函数
functionMainScene:onCreate()
--加载CocosStudio编辑出来的MainScene.csb
localroot =cc.CSLoader:createNode("MainScene.csb")
root:addTo(self)
localfunctiononPlay()
--进入PlayScene,使用闭包catch self变量。
self:getApp():enterScene("PlayScene")
end
--获取名称为PlayButton的按钮,然后添加这个按钮在接受到点击时的处理代码
root:getChildByName("PlayButton")
       :addClickEventListener(onPlay)
end
returnMainScene 
大部分逻辑上述代码中的注释都有写明。

游戏界面: 
点击Play按钮,会触发上述代码中的onPlay函数。然后执行下面这句代码:

self:getApp():enterScene("PlayScene")
如上:先通过ViewBase的getApp接口获取App对象,然后执行app的enterScene接口,这个接口会根据参数去app/views文件夹下找PlayScene.lua这个文件并加载出来。当然这个文件里边的类必须继承自ViewBase,不继承ViewBase就不能用enterScene加载。
PlayScene.lua的部分代码如下:
1.逻辑代码的加载:
localGameLogital =import("..models.GameLogital")
MVC框架没有帮我们自动加载app/models里边的lua代码,需要我们自己去手动加载这些东西。
注:这里使用到import接口而不是require,import是quick框架提供的接口,相比require这个接口使用的是相对路径。
2.方便的接口:
self.root =cc.CSLoader:createNode("PlayScene.csb"):addTo(self)
注意最后的addTo函数,这些函数是quick提供的,在调用完会返回对象本身,所以我们可以像下面这样使用,不需要重复地去写变量名:
cc.Sprite:create(texture):move(x,y):rotate(r):addTo(p)
这些函数可以在src/cocos/framework/extends/下找到。
3.创建,添加动画:
localtlAct =cc.CSLoader:createTimeline("PlayScene.csb")
self.root:runAction(tlAct)
self.act_tag = tlAct:getTag()--用于后续获取动画
首先使用cc.CSLoader:createTimeline创建动画,然后使用runAction把这个动画挂载到加载出来的节点上。
4.播放动画:
local tlAct =self.root:getActionByTag(self.act_tag)
tlAct:gotoFrameAndPlay(0,false)
先通过tag获取动画,如上。然后调用gotoFrameAndPlay接口,这个接口有三个重载:
gotoFrameAndPlay(begin,end,loop)
gotoFrameAndPlay(begin,loop)
gotoFrameAndPlay(begin)
参数解释:
Begin:从第几帧开始播放
End:播放到第几帧
Loop:是否循环



0 0
原创粉丝点击