文档章节

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

Valiancer
 Valiancer
发布于 2017/08/24 18:31
字数 370
阅读 144
收藏 1
点赞 0
评论 0

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
码字总数 4264
作品 0
石景山
Lynx技术分析-JS引擎扩展设计

JS Binding 技术 Lynx(一个高效的跨平台框架) 的 JS Binding 技术最主要的目的是搭建一个高效的与 JS 引擎解耦的通信桥梁,同时具备 JS 引擎切换的能力。该技术经历了多次迭代,最终通过抽...

hxxft ⋅ 05/15 ⋅ 0

绕开“陷阱“,阿里专家带你深入理解C++对象模型的特殊之处

摘要:本文介绍了C++对象模型的特殊之处,包括与C兼容的朴素模型,以及能支持多态的虚表模型,同时还带大家了解了构造函数与析构函数相关的一些特性与陷阱。这些内容能够帮助大家更好地学习和...

nirvanalucky ⋅ 04/25 ⋅ 0

Cocos2d-x 3.1 Lua Binding

参考:http://www.cocos2d-x.org/docs/manual/code-ide/binding-custom-class-to-lua/en 进入到tolua目录:$(PROJECT_ROOT)/frameworks/cocos2d-x/tools/tolua 在之前先看看README文件,并安......

Nov_Eleven ⋅ 2014/08/05 ⋅ 0

C++灵魂所在之---多态的前世与今生

开头先送大家一句话吧: 众所周知,在20世纪80年代早期,C++在贝尔实验室诞生了,这是一门面向对象的语言,但它又不是全新的面向对象的语言,它是在传统的语言(C语言)进行面向对象扩展而来...

loving_forever_ ⋅ 2016/06/13 ⋅ 0

深入理解 Rust 的动态分派模型

让我做个开场白,我是rust世界的新手(虽然我喜欢它很久了),如果我犯了技术性错误,请让我知道并且我会尽力纠正它们。说到这为止,让我们开始吧! 在下面的代码片段中可以看到我深入研究动...

xiaoaiwhc1 ⋅ 05/09 ⋅ 0

jni在C/C++代码中调用java函数,java函数的参数是接口,有办法吗?

先上一段安卓下面搜索BLE的代码: 这里面的this是一个回调接口,当搜索到蓝牙设备时,会回调该接口。 在安卓上面用java没问题,但是现在需要在C++函数中实现这一段。 步骤描述: C++: 1 获取...

lvrenyang ⋅ 05/22 ⋅ 0

消灭“脑细胞杀手”,阿里专家带你深入C++对象的生命周期管理

摘要:C/C++的指针一直是令人又爱又恨的特性。围绕指针产生了许许多多优雅的数据结构和系统实现,但又滋生了不少“脑细胞杀手”——内存Bug。C/C++指针问题(空指针、野指针、垂悬指针)的根...

萌萌怪兽 ⋅ 04/18 ⋅ 0

lua与C++的交互

参考文档地址: Lua 与C交互 项目名字:SimFrame 项目语言:C++,lua(5.1) 项目框架:Cocos2d-x 2.2.3 一.创建项目 首先 cd到cocos2d-x包下的tools中的project-creator目录,输入 ./create_p...

水水鱼 ⋅ 2015/02/27 ⋅ 0

google的protobuf库

这篇文章将讲述如何使用google的protobuf库实现一个RPC service,就实现一个最简单的service吧:echo.文章对应的代码都可以在eventrpc中找到,写下这篇文章时的svn revision是138. 1) 定义协议首...

moki_oschina ⋅ 06/06 ⋅ 0

新里程碑:Cocos2d-x v3.0 正式版本发布!

历经半年多的精心打磨,Cocos2d-x v3.0正式版本最终发布!相比于去年9月份的Cocos2d-x v3.0-alpha版,正式版本在渲染器、性能、兼容性、稳定性等方面都得到了质的提升,并新增对WinPhone8的支...

oschina ⋅ 2014/04/27 ⋅ 11

没有更多内容

加载失败,请刷新页面

加载更多

下一页

linux 安装docker

通过以下命令下载安装docker wget -qO- https://get.docker.com | sh 执行以上命令后输出以下内容说明安装成功,注意红框中的内容,docker安装成功后默认只有root能使用,红框中给出的提示是...

haoyuehong ⋅ 3分钟前 ⋅ 0

482. License Key Formatting - LeetCode

Question 482. License Key Formatting Solution 思路:字符串转化为char数组,从后遍历,如果是大写字母就转化为小写字母,如果是-就忽略,如果遍历了k个字符(排除-)就追加一个-。 Java实现...

yysue ⋅ 22分钟前 ⋅ 0

聊聊spring cloud gateway的LoadBalancerClientFilter

序 本文主要研究一下spring cloud gateway的LoadBalancerClientFilter GatewayLoadBalancerClientAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springfram......

go4it ⋅ 46分钟前 ⋅ 0

详解:Nginx反代实现Kibana登录认证功能

Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操作如何使用Nginx反向代理...

问题终结者 ⋅ 53分钟前 ⋅ 0

002、nginx配置虚拟主机

一、nginx配置虚拟主机可分为三种方式,分别为: 1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站 2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站...

北岩 ⋅ 56分钟前 ⋅ 0

shell脚本之死循环写法

最近在学习写shell脚本,在练习if while等流程控制时,突然它们的死循环写法是怎么样的?经过百度与亲测记录如下: for死循环 #! /bin/bashfor ((;;));do date sleep 1d...

hensemlee ⋅ 58分钟前 ⋅ 0

苹果的ARKit2.0有多可怕,看了就知道

序言 ARKit主要由三部分组成: 跟踪(Tracking) 跟踪是ARKit的核心组件之一,其提供了设备在物理世界中的位置与方向信息,并对物体进行跟踪,如人脸。 2.场景理解(Scene Understanding) 场...

_小迷糊 ⋅ 59分钟前 ⋅ 0

5.1 vim介绍 5.2 vim移动光标 5.3 ,5.4vim一般模式下移动光标,复制粘贴

vim命令 vim是vi的一个升级版;vim可以显示文字的颜色 安装vim这一个包vim-enhanced 如果不知道安装包,可以使用 命令下面命令来查看vim命令是那个包安装的。 [root@linux-128 ~]# yum prov...

Linux_老吴 ⋅ 今天 ⋅ 0

vim一般模式

vim 是什么 vim是什么 ? 在之前接触Linux,编辑网卡配置文件的时候我们用过了vi ,vim简单说就是vi的升级版,它跟vi一样是Linux系统中的一个文本编辑工具。 如果系统中没有vim ,需要安装一...

李超小牛子 ⋅ 今天 ⋅ 0

docker实战

构建企业级Docker虚拟化平台实战 重点剖析虚拟化和云计算概念; 分析Docker虚拟化的概念和原理; 从0开始实战Docker虚拟化平台; 基于Docker构建Nginx WEB服务器和CentOS虚拟机; 基于开源监...

寰宇01 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部