quick 3.3 C++回调lua方法
来源:互联网 发布:黑色时间轴源码下载 编辑:程序博客网 时间:2024/05/17 00:48
以前在quick 2.x的时候直接用LUA_FUNCTION,然后弄一个.tolua文件直接生成,就可以传入lua fucntion保存,然后用c++调用。
虽然3.3也可以使用这个方法,但是没有tolua文件的地方了,剩下的是各种.ini和genbindings.py来生成tolua cpp文件。
一个简单的例子
cpp文件
void MyClass::foo(std::function<void(int aa, int bb, int cc, int dd)> listener, int a, int b, int c, int d){ listener(a, b, c, d);}
tolua文件
int lua_MyClass_MyClass_foo(lua_State* tolua_S){ int argc = 0; MyClass* cobj = nullptr; bool ok = true;#if COCOS2D_DEBUG >= 1 tolua_Error tolua_err;#endif#if COCOS2D_DEBUG >= 1 if (!tolua_isusertype(tolua_S,1,"MyClass",0,&tolua_err) || !toluafix_isfunction(tolua_S,2,"LUA_FUNCTION",0,&tolua_err)) goto tolua_lerror;#endif cobj = (MyClass*)tolua_tousertype(tolua_S,1,0);#if COCOS2D_DEBUG >= 1 if (!cobj) { tolua_error(tolua_S,"invalid 'cobj' in function 'lua_MyClass_MyClass_foo'", nullptr); return 0; }#endif argc = lua_gettop(tolua_S)-1; if (argc == 5) { int arg0; int arg1; int arg2; int arg3; int arg4; arg0 = toluafix_ref_function(tolua_S,2,0); ok &= luaval_to_int32(tolua_S, 3,(int *)&arg1, "MyClass:foo"); ok &= luaval_to_int32(tolua_S, 4,(int *)&arg2, "MyClass:foo"); ok &= luaval_to_int32(tolua_S, 5,(int *)&arg3, "MyClass:foo"); ok &= luaval_to_int32(tolua_S, 6,(int *)&arg4, "MyClass:foo"); if(!ok) { tolua_error(tolua_S,"invalid arguments in function 'lua_MyClass_MyClass_foo'", nullptr); return 0; } cobj->foo([=](int aa, int bb, int cc, int dd){ LuaStack *stack = LuaEngine::getInstance()->getLuaStack(); stack->pushInt(aa); stack->pushInt(bb); stack->pushInt(cc); stack->pushInt(dd); stack->executeFunctionByHandler(arg0, 4); stack->removeScriptHandler(arg0); }, arg1, arg2, arg3, arg4); return 0; } luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "MyClass:foo",argc, 5); return 0;#if COCOS2D_DEBUG >= 1 tolua_lerror: tolua_error(tolua_S,"#ferror in function 'lua_MyClass_MyClass_foo'.",&tolua_err);#endif return 0;}
lua调用c++
function toluaTest(bb, cc, dd, ee) print('====', bb, cc, dd,ee) end local myClass = MyClass:create(); myClass:foo(toluaTest,1,2,3,4);
0 0
- quick 3.3 C++回调lua方法
- quick cocos2dx c-lua(1)
- quick cocos2dx c-lua(2)
- quick cocos2dx c-lua(3)
- quick-3.5 lua调用c++
- quick-cocos2dx 3.3 c++绑定到Lua
- quick-cocos2d-x 导出 C/C++ API 给 Lua 使用
- quick-cocos2dx cocos2dx.lua
- quick lua加密
- quick-lua攻击按键
- lua QUICK-COCOS2D-X
- 再谈quick lua 继承
- quick+lua开发游戏
- Lua脚本:Lua调用C实现方法
- Lua脚本:C调用Lua实现方法
- quick.c
- cocos2dx 3.3 quick lua 实现返回键退出程序
- Quick-x lua 环境配置
- jQuery之下拉框左右选择
- LayoutInflater的使用
- 杨氏矩阵查找
- 如何判断Javascript对象是否存在
- html学习笔记(3)
- quick 3.3 C++回调lua方法
- Android初学习 - 在XML中设置分割线
- eclipse代码注释的设置)
- Android数据存储方式(二)SharedPreferences(偏好参数保存)
- iOS UIBezierPath知识介绍
- 蓝桥杯——算法训练 大数字的读法
- Android访问服务器,报404
- 递归与尾递归
- 堆排序(Heapsort)之Java实现