文档章节

cocos2d-lua绑定C++自定义类(自动+手动绑定回调函数)

Valiancer
 Valiancer
发布于 2017/08/24 18:31
字数 370
阅读 172
收藏 1

1.自定义C++类

将文件保存在frameworks/runtime-src/Classes/目录下,然后编写对应的.ini文件(在frameworks/cocos2d-x/tools/tolua/目录),然后修改genbindings.py(同目录)文件141行附近,将修改的ini文件加进去,可以把其他的注释掉。然后再cmd到当前文件夹,中执行genbindings.py脚本:python genbindings.py,会在cocos/scripting/lua-bindings/auto中生成文件,按照步骤2加入到工程对应的auto目录下,然后在AppDelegate.cpp文件中添加相关头文件和注册register_custom_function(stack->getLuaState())

2.添加到xcode

添加文件到对应的项目工程下,如图:

不要忘了勾选平台

添加搜索路径:

$(SRCROOT)/../../../../../runtime-src/Classes

3.添加到vs

$(EngineRoot)..\runtime-src\Classes

 

上边是自动绑定,lua调用c++

但是自动绑定不支持lambda,回调函数需要手动绑定

1.声明lua函数ID

​int _handlerID;


//注册lua回调函数,需lua主动调用
void XXX::registerScriptTouchHandler(int onTouchHandler)
{
	_handlerID = onTouchHandler;

	_handlerTouch = std::bind(&RichElementTextEx::handlerTouch, this, std::placeholders::_1);
}

​//C++回调函数,在其中调用lua回调函数并填入相应参数
void XXX::handlerTouch(const string& name)
{
	LuaStack* stack = LuaEngine::getInstance()->getLuaStack();

	stack->pushString(name.c_str());

	stack->executeFunctionByHandler(_handlerID, 1);
	stack->clean();
}

2.修改自动绑定生成的cpp文件

找到注册函数 lua_XXX_registerScriptTouchHandler(lua_State* tolua_S),将其中的

ok &= luaval_to_int32(tolua_S, 2,(int *)&arg0, "RichElementTextEx:registerScriptTouchHandler");
if(!ok)
{
    ...
    return 0;
}

改为

arg0 = toluafix_ref_function(tolua_S, 2, 0);
//toluafix_get_function_by_refid(tolua_S, arg0);

3.lua调用

local val = xxx:create();
val:registerScriptTouchHandler(function(name)
                                   ...
                               end);

 

© 著作权归作者所有

共有 人打赏支持
Valiancer
粉丝 0
博文 20
码字总数 4317
作品 0
石景山
CC3.2+Lua(8) ——Lua调用自定义C++类

【唠叨】 本节要讲的是如果将自己写的C++类注册进Lua环境,让Lua去调用自定义的C++类。 网上有很多都是用原始的tolua++工具来注册C++类的,我看了很多这样的教程,感觉操作起来十分麻烦,而且...

0-1
2014/10/29
0
0
C++ 跨平台多功能扩展库 - cpgf

cpgf 可为C++代码增加反射(元数据)、序列化、以及Luau和Python脚本绑定等功能,且不依赖任何外部工具。 cpgf 的目标是扩展C++语言,其中包含许多易于使用的功能,这些功能仅在其他更高级别...

wqking
09/17
0
0
unreal4 引擎的 Lua 开发插件 - sluaunreal

sluaunreal 是腾讯开源的适用于 unreal4 引擎的 Lua 开发插件,可让开发者高效地使用 Lua 进行业务开发。sluaunreal 作为 unreal 引擎的插件,通过 unreal 自带蓝图接口的反射能力,结合 li...

匿名
08/04
0
0
CC_CALLBACK原理及应用

c++ 11 基础 : std::function 类模版 std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标进行存储、复制、和调用操作,这些目标包括函数、lambda表达式...

霄霄月月
2014/04/07
0
1
腾讯开源 Lua 开发插件 sluaunreal,加速游戏业务开发

近日,腾讯开源了其用于游戏业务的 sluaunreal,该项目是适用于 unreal4 引擎的 Lua 开发插件,可让开发者高效地使用 Lua 进行业务开发。 项目地址:https://github.com/Tencent/sluaunreal...

h4cd
08/04
0
1

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
18
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部