参考链接:http://my.oschina.net/kkkkkkkkkkkkk/blog/521496

本文是上一篇的续集,继续整理 C++ 调用 Lua 函数的两种写法。其中 handler 是通过手动修改 tolua 生成的 cpp 文件得到的。

两种调用方式的代码示例

下面的 callLuaFunc 同时列出了两种做法:方法 1(通过向 Lua 发送事件的方式调用)写在注释中作为对照,方法 2(直接操作 LuaStack 执行 handler)是当前实际启用的实现。

..
                其中handler 通过手动改 tolua 生成的 cpp文件获取
                ..
                void toLuaFunc::callLuaFunc(const char*ARG)
                {
                
                	CC_ASSERT(handler > 0, "call lua func 's handle must bigger than 0");
                /*
                方法1   发送事件到lua
                	cocos2d::CommonScriptData data(handler, ARG);
                	cocos2d::ScriptEvent scriptEvent(cocos2d::kCommonEvent, &data);
                	cocos2d::LuaEngine::getInstance()->sendEvent(&scriptEvent);
                */
                
                
                // 方法2  
                	cocos2d::LuaEngine::getInstance()->getLuaStack()->clean();
                
                	cocos2d::LuaEngine::getInstance()->getLuaStack()->pushString(ARG);
                	cocos2d::LuaEngine::getInstance()->getLuaStack()->executeFunctionByHandler(handler, 1);
                
                	cocos2d::LuaEngine::getInstance()->getLuaStack()->clean();
                
                
                
                }