【Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之三】动手绑定自定义类至Lua

查看【Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之二】新建项目中配制环境,我们完美的在新建项目中完成了绑定需要的环境,接下来才是最关健的一步。绑定自定义C++类至Lua。

事实上引擎为了方便我们应对不同平台,已经帮我们创建了不同平台的工程项目。为了编辑代码方便,我使用VS2013打开了"runtime-src"文件夹下的"proj.win32"工程。 前往项目录径“F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”,我将在这里创建一个自定义类"Pet",代码如下。

只是一个很简单的Pet类。

1.继承于引擎定义的精灵类Sprite;

2.通过引擎定义的宏CREATE_FUNC(Pet)定义一个静态方法create();

3.两个成员函数init()、setPet();

4.具有一个数据成员name。

非常的简单,我们正是要一切从简单开始!不过需要再次提醒的是,我们是在“F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”创建了Pet类,一会我们将用到这个路径。

准备好定义C++类之后,我们再回顾一下上一小节的内容,我们在环境测试中,通过“genbindings.py"脚本将Cocos2d-x引擎中所有的C++类文件绑定至Lua。(虽然测试环境时,我并没有说明这点.但是实事上我们运行“genbindings.py",在最后的结果中就能看到"Generating
lua bindings succeeds"
这样的提示,聪明的读者一定猜到了它所完成的工作就是绑定C++类至Lua)。

接下来,对 "genbindings.py",如果你对Python语言并不熟悉,哪请忽略其它的代码,只需要把你的视线焦点集中在133行至151行。

// 指定tolua所在的录径 无需修改

tolua_root = ‘%s/tools/tolua‘ % project_root

// 指定绑定脚本执行后,产生的绑定一系列文件输出保存于何路径

// 虽然无需修改,但是我们要记住,我们产生的绑定文件是输出于

// "F:\Cocos2dx-Lua\Garfield\frameworks\cocos2d-x\cocos\scripting\lua-bindings\auto"

output_dir = ‘%s/cocos/scripting/lua-bindings/auto‘ % project_root

// 这个数组中指定了要执行绑定脚本的一些配制参数 ,看到第一行,‘cocos2dx.ini‘ 是一个配制文件,我们可以在"genbindings.py"同级目录中找到它。‘cocos2d-x’实际上是在 ‘cocos2dx.ini‘
配制文件中的第一行所指定的一个字符常量,主要是用于生成绑定桥接文件时,为诸如条件编译 ifndef 及 生成的注册自定义类接口取名所用。一会我将会在后面稍提这点,这里如果不明白,请暂时忽略它。‘lua_cocos2dx_auto’是给生成的绑定桥接文件指定的言语件名。

cmd_args  = {‘cocos2dx.ini‘ : (‘cocos2d-x‘, ‘lua_cocos2dx_auto‘), \

... ...

}

了解了"genbindings.py",在它的同级目录你可以找到”cocos2dx.ini“,这是与之息息相关的配制文件。打开它,我们稍做了解。

请关注于 第 1、4、8、25 行。

还记得上面我们提到的数组吗?

cmd_args  = {‘cocos2dx.ini‘ : (‘cocos2d-x‘, ‘lua_cocos2dx_auto‘), \

... ...

}

第 1 行就是第二个参数指定的字符内容

第 4 行是一些条件编译 ifndef 及 生成的注册自定义类接口取名所用的前缀,前面我们已经提到过。


8 行是指定该绑定类的命名空间

第 25 行指定需要绑定的自定义类头文件路径

了解这些之后,我们将对这两个文件进行一些修改,用于完成我们的类至Lua的绑定。

首先我们拷贝一份‘cocos2dx.ini‘,将其命名为
‘custom_pet.ini‘。拷贝一份‘genbindings.py‘,将其命名为 ‘custom_pet_genbindings.py‘。

改动‘custom_pet.ini‘第
1、4、8、25 行。如下:

因为我们没有指定名字空间,所以第
8 行‘target_namespace‘将其赋空。

而‘headers‘当中只是相对路径的给定。还记得"Pet"类我们是创建于哪里吗?

正是在F:\Cocos2dx-Lua\Garfield\frameworks\runtime-src\Classes”。

OK!接下来我们改动‘custom_pet_genbindings.py‘。关注于第
133 至 138 行,我们将在这里做一些修改。如下:

在cmd_args参数表中,我们指定该Python绑定脚本的配制文件为我们修改好的‘custom_pet.ini‘。一些可能会用到的命名前缀为‘custom_pet‘。指定导出的桥接文件名为‘lua_pet_auto‘。

最后,我们执行‘custom_pet_genbindings.py‘。 "Generating
lua bindings succeeds"!

   见到它,你该欢呼了:)。你已经完成了C++自定义类至Lua的绑定。

   在下一小节中,我们来探索下,怎么样在你的项目中使用Lua调用Pet类。

时间: 2024-11-06 21:48:37

【Quick-COCOS2D-X 3.3 如何绑定自定义类至Lua之三】动手绑定自定义类至Lua的相关文章

quick cocos2d x 手机(Android端)启动过程学习

简要学习下quick cocos2d x 在安卓端启动的过程. 首先需要了解一点:quick cocos2d x是依托于Android的activity和GLSurfaceView(继承自SurfaceView)的环境来显示quick层的游戏界面. (1)首先quick类的android游戏从AndroidManifest.xml文件指定的activity(假设AC)启动. (2)AC继承父类的Cocos2dxActivity. (3)调用静态初始化块,加载cocos2dx的动态库.也就是一些C

quick cocos2d-x Xcode下省去clean,让修改的脚本生效

<quick cocos2d-x Xcode下省去clean,让修改的脚本生效> 项目  target     build phases    点击build phase的空白区域 选择Editor     Add Build Phase      Add Run Script Build Phase 编写脚本: 顺序调整:(第二顺位) 这样就可以避免每次修改了lua脚本,都要手动clean,然后再run,太费时间.. quick cocos2d-x Xcode下省去clean,让修改的脚本生

quick cocos2d x场景切换的生命周期函数调用学习

先上一个场景的基本模版: 1 local ModelScene = class("ModelScene", function() 2 return display.newScene("ModelScene") 3 end) 4 5 function ModelScene:ctor() 6 self.sceneName = "ModelScene" 7 -- 注册点击事件监听 8 self.layer = display.newLayer() 9

自定义类签发校验token-实现多方式登录-自定义反爬类-admin后台表管理字段自定义-群查接口-搜索-排序-分页

目录 复习 今日 签发token 校验token 案例:实现多方式登陆签发token 案例:自定义认证反爬规则的认证类 admin使用自定义User表:新增用户密码密文 群查接口各种筛选组件数据准备 drf搜索过滤组件 drf排序过滤组件 drf基础分页组件 复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法.判断是否有权限方法.计数等待时间方法 自定义频率组件: class MyThrottle(SimpleRateThrottle): scope = 'sm

简述C/C++调用lua中实现的自定义函数

1.首先说下目的,为什么要这么做 ? 正式项目中,希望主程序尽量不做修改,于是使用C/C++完成功能的主干(即不需要经常变动的部分)用lua这类轻量级的解释性语言实现一些存在不确定性的功能逻辑:所以,程序功能如有问题,只需对lua脚本作出修改,而修改脚本的好处是简单高效,改完脚本后重新执行程序便能看到效果.  2.具体怎么做? 一般来说,C/C++调用lua接口或是数据交互,首先要做的是包含lua相关操作的头文件以及lua库相关的头文件,然后调用接口创建lua环境.用操作栈的规则和lua交互数据

【Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之三】动手绑定自己定义类至Lua

查看[Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之二]新建项目中配制环境,我们完美的在新建项目中完毕了绑定须要的环境,接下来才是最关健的一步.绑定自己定义C++类至Lua. 其实引擎为了方便我们应对不同平台,已经帮我们创建了不同平台的project项目. 为了编辑代码方便.我使用VS2013打开了"runtime-src"文件夹下的"proj.win32"project. 前往项文件夹径"F:\Cocos2dx-Lua\Garfie

boost库在工作(15)绑定器与函数对象之三

前面已经可以优美地解决两个参数的函数给算法for_each调用了,但是又会遇到这样的一种情况,当需要三个参数或者三个以上的参数给算法for_each调用呢?从STL里的绑定器bind1st,显然是不行了,因为它最多只支持两个参数,那还有什么办法呢?这时就需要使用boost库里强大的绑定器bind了.它不仅适用的情况比STL库里的多,还更加方便,更加人性化.下面就来看看怎么样绑定三个参数的类成员函数的例子,如下: [cpp] view plaincopy //调用类的成员函数,但参数两个以上. /

类下的函数的绑定与解除绑定

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

常规功能和模块自定义系统 (cfcmms)—007Extjs的配置文件和自定义ui

常规功能和模块自定义系统 (cfcmms)-007Extjs的配置文件和自定义ui 一.在自动生成的项目中,文件 app.json 是整个前台系统的配置文件,可以在里面增加或修改配置参数来完成相应的功能.该文件的部分参数如下: { "name": "cfcmms", //项目命名空间 "version": "1.0.0.0", //项目版本号 "indexHtmlPath": "index.htm