在上一篇当中,简单的解释了一下,cocosC++控件类的实现。那么在这一篇当中,我们开始来了解C++类是如何绑定到lua当中的。
首先是需要tolua这个工具,因为cocos本身自带这个工具,所以我们直接使用就行了,也不需要pkg什么的。不仅仅是我们下载的cocos2dx3.x当中的tolua可以使用,在我们项目当中的tolua也是可以使用的。有些人估计不知道tolua是什么,就是在cocos2d-x-3.x/tools/tolua或者是项目当中的项目名称/framework/cocos2d-x/tools/tolua。
首先,我们绑定是需要配置tolua,根据文件夹当中的README.mdown来配置好环境吧。
然后,我们需要自己写自己的两个文件,一个是.py,另外一个是.ini。我们就直接复制一个文件夹里面的genbindings.py和cocos2dx_spine.ini这两个文件,重命名为accordion.py和accordion.ini。下面是两个文件的修改
accordion.py
1、搜索“output_dir”,我的output_dir是改为了 output_dir = '%s/tools/tolua/auto' % project_root 这个其实就是之后绑定生成文件的地址,在哪都不要紧,因为我们需要的是生成的.hpp和.cpp文件,把这两个文件拷贝到项目的Class下就行了,其他的文件暂时用不到。
2、搜索“cmd_args” , 按照模式修改,其他的都删除了,就只写你自己类的东西,如:cmd_args = {'accordion.ini' : ('accordion', 'lua_accordion_auto')}
accordion.ini
1、修改第一行中括号中的东西,我修改为了[accordion]
2、prifix = xxx 修改为 prifix = accordion *注意这个accordion不是关键字什么的,只是因为我的控件名为accordion
3、target_namespace = sp 改为 target_namespace = 这里是把sp删除为空,不是写漏
4、cocos_headers **重点注意这个,等会绑定的时候如果是缺少了什么文件的话,是在这里添加需要文件的地址
5、headers = %(cocosdir)s/cocos/editor-support/spine/spine-cocos2dx.h 改为 headers = (这里是写控件类.h的路径)
6、skip = xxxxxxxx 改为 skip =
7、abstract_classes = xxxxxxx 改为 abstract_classes =
8、class = xxxxxxxx 改为 class = (这里是写类的名字,如果一个文件里面有两个类的话,那就在中间加个空格)
这样就ok了,然后在终端当中cd到tolua的文件夹,然后运行python accordion.py。这里如果是文件缺失的话,那就在上面的.ini文件中,cocos_headers当中加入该文件的地址。如果发现不行的话,那就删除了文件.py和.ini,重新配置一下。
之后如果绑定成功的话,那么我们把生成的auto文件夹中的.hpp和.cpp放到项目的class当中。
然后我们来到AppDelegate.cpp文件当中,在
auto engine = LuaEngine::getInstance();下面添加进
register_all_accordion(engine->getLuaStack()->getLuaState());
这里的register_all_accordion()方法是在.hpp当中的方法。配置时候的名字不一样,这里的名字也会不一样。记得#include .hpp
之后我们就可以通过类名:方法来调用static函数了。
这里贴上我写的一点点代码:
local scene = cc.Scene:create();
local layer = FRAccordion:create(size, tableR, 2)
layer:registerChangeScriptFunc(function ()
local content = cc.LabelTTF:create("label", "Arial", 24)
layer:setCurrentContent(content)
end)
scene:addChild(layer)
至此,控件类就简单的弄完了,如果漏了什么没写的话,可以提醒下我。