博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2dx lua 绑定之二:手动绑定自定义类中的函数
阅读量:6273 次
发布时间:2019-06-22

本文共 2326 字,大约阅读时间需要 7 分钟。

cococs2dx 3.13.1 + vs2013 + win10

1.首先按照绑定Student类

 

2.在Student类中增加一个用于测试手动绑定的函数manual_call

①Student.h中增加函数

//手动绑定调用函数    void manual_call();

②Student.cpp中增加函数实现

//和自动绑定相比,只增加了这个函数void Student::manual_call(){    std::cout << " manual call function " << std::endl;}

 

3.在libluacocos2d项目中新增两个手动绑定的处理文件lua_cocos2dx_student_manual.h和lua_cocos2dx_student_manual.cpp

 

①lua_cocos2dx_student_manual.h

#pragma once#ifdef __cplusplusextern "C" {#endif#include "tolua++.h"#ifdef __cplusplus}#endifTOLUA_API int register_student_moudle(lua_State* L);

 

②lua_cocos2dx_student_manual.cpp

#include "scripting/lua-bindings/manual/user_define/lua_cocos2dx_student_manual.hpp"#include "scripting/lua-bindings/auto/lua_userdefine_student_auto.hpp"#include "user_define/Student.h"#include "scripting/lua-bindings/manual/tolua_fix.h"#include "scripting/lua-bindings/manual/LuaBasicConversions.h"#include "scripting/lua-bindings/manual/cocos2d/LuaScriptHandlerMgr.h"#include "scripting/lua-bindings/manual/CCLuaValue.h"#include "scripting/lua-bindings/manual/CCLuaEngine.h"#include "base/CCEventListenerFocus.h"//调用函数static int tolua_student_test_function(lua_State* L){    if (nullptr == L)        return 0;    Student** s = (Student**)luaL_checkudata(L, 1, "Student");    luaL_argcheck(L, s != NULL, 1, "invalid user data");    (*s)->manual_call();    return 0;}//注册函数static void regist_student_manual_functions(lua_State* L){    //找到对应自动注册的类    lua_pushstring(L, "Student");    lua_rawget(L, LUA_REGISTRYINDEX);    if (lua_istable(L,-1))    {        tolua_function(L, "manual_call", tolua_student_test_function); //将函数绑定到Student类中    }    lua_pop(L, 1);}int register_student_moudle(lua_State* L){    lua_getglobal(L, "_G");    if (lua_istable(L,-1))//stack:...,_G,    {        register_all_userdefine_student(L);        regist_student_manual_functions(L);    }    lua_pop(L, 1);        return 1;}

 

4.将函数注册到lua中,找到libluacocos2d项目中

①在CCLuaStack.cpp文件增加头文件引用

#include "scripting/lua-bindings/manual/user_define/lua_cocos2dx_student_manual.hpp"

②在init函数里增加函数注册到Lua

先屏蔽注册自动函数的相关代码,使用register_student_moudle同时注册自动绑定和手动绑定的函数

//register_all_userdefine_student(_state);register_student_moudle(_state);

 

5.重新编译项目,在Lua里使用

local student = Student:new()student:manual_call()

 

6.如果不使用自动绑定,全部使用手动绑定,可参考下面两篇文章直接进行绑定

 

《》

《》

 

转载于:https://www.cnblogs.com/chevin/p/5954948.html

你可能感兴趣的文章
tableVIew删除时的delete按钮被挡住时重写的方法
查看>>
读cookie中文字符乱码问题
查看>>
招募译者翻译并发数据结构
查看>>
普通表转换为分区表
查看>>
Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较
查看>>
性能优化总结(六):预加载、聚合SQL应用实例
查看>>
http缓存知识
查看>>
Go 时间交并集小工具
查看>>
iOS 多线程总结
查看>>
webpack是如何实现前端模块化的
查看>>
TCP的三次握手四次挥手
查看>>
关于redis的几件小事(六)redis的持久化
查看>>
package.json
查看>>
webpack4+babel7+eslint+editorconfig+react-hot-loader 搭建react开发环境
查看>>
Maven 插件
查看>>
初探Angular6.x---进入用户编辑模块
查看>>
计算机基础知识复习
查看>>
【前端词典】实现 Canvas 下雪背景引发的性能思考
查看>>
大佬是怎么思考设计MySQL优化方案的?
查看>>
<三体> 给岁月以文明, 给时光以生命
查看>>