cocos3.x 编写C++控件在lua上面调用(二)

在上一篇当中,简单的解释了一下,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)


至此,控件类就简单的弄完了,如果漏了什么没写的话,可以提醒下我。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值