cocos2d-x-2.1beta3-x-2.1.1调用lua带参数全局函数
2013-04-27 14:55
555 查看
CCLuaEngine.h
行212-221
已经有这些把各种参数压栈的接口
行191
也有这种不带参数调用lua全局函数的接口
行222
也有这用通过hander带参数调用lua函数的接口
就是没有通过functionName带参数调用lua函数的接口,所以需要自己实现一个,下面是实现代码
通过这个接口可以方便的带参数调用lua全局函数
如果有什么更好的方法,请大牛指出
行212-221
int pushInt(int data); int pushFloat(float data); int pushBoolean(bool data); int pushString(const char* data); int pushString(const char* data, int length); int pushNil(void); int pushCCObject(CCObject* pObject, const char* typeName); int pushCCLuaValue(const CCLuaValue& value); int pushCCLuaValueDict(const CCLuaValueDict& dict); int pushCCLuaValueArray(const CCLuaValueArray& array);
已经有这些把各种参数压栈的接口
行191
virtual int executeGlobalFunction(const char* functionName);
也有这种不带参数调用lua全局函数的接口
行222
int executeFunctionByHandler(int nHandler, int numArgs);
也有这用通过hander带参数调用lua函数的接口
就是没有通过functionName带参数调用lua函数的接口,所以需要自己实现一个,下面是实现代码
int executeGlobalFunction( const char* functionName, int numArgs ) { lua_State *luaState = CCLuaEngine::defaultEngine()->getLuaState(); lua_getglobal(luaState, functionName); /* query function by name, stack: function */ if (lua_isfunction(luaState, -1)) { if (numArgs > 0) { lua_insert(luaState, -(numArgs + 1)); /* stack: ... func arg1 arg2 ... */ } int traceback = 0; lua_getglobal(luaState, "__G__TRACKBACK__"); /* stack: ... func arg1 arg2 ... G */ if (!lua_isfunction(luaState, -1)) { lua_pop(luaState, 1); /* stack: ... func arg1 arg2 ... */ } else { traceback = -(numArgs + 2); lua_insert(luaState, traceback); /* stack: ... G func arg1 arg2 ... */ } int error = 0; error = lua_pcall(luaState, numArgs, 1, traceback); /* stack: ... ret */ if (error) { if (traceback == 0) { CCLOG("[LUA ERROR] %s", lua_tostring(luaState, - 1)); /* stack: ... error */ lua_pop(luaState, 1); // remove error message from stack } return 0; } // get return value int ret = 0; if (lua_isnumber(luaState, -1)) { ret = lua_tointeger(luaState, -1); } else if (lua_isboolean(luaState, -1)) { ret = lua_toboolean(luaState, -1); } lua_pop(luaState, 1); // remove return value from stack return ret; } else { CCLOG("[LUA ERROR] name '%s' does not represent a Lua function", functionName); lua_pop(luaState, 1); lua_pop(luaState, numArgs); // remove args from stack return 0; } }
通过这个接口可以方便的带参数调用lua全局函数
CCLuaEngine::defaultEngine()->pushInt(intData); CCLuaEngine::defaultEngine()->pushString(data, dataSize); executeGlobalFunction("myFun", 2);
如果有什么更好的方法,请大牛指出
相关文章推荐
- 【木头Cocos2d-x 031】Lua篇(第06章):Lua调用C++的函数
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- C#调用参数为函数指针的API函数 - 以SetUnhandledExceptionFilter为例编写一个全局异常处理程序
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- cocos2d-x 3.0 在C++中调用lua函数(2)
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- php部分(查看文件、建立站点、语法变量、变量的几个方法、“全局局部变量的调用”、static、函数参数的作用域);
- 递归调用中使用全局变量或者函数参数
- Cocos2d-x 3.X下Lua调用自定义C++类和函数的最佳实践
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- lua脚本语言的学习-----------------如何实现c++无参数的函数在lua中调用
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- 【木头Cocos2d-x 031】Lua篇(第06章):Lua调用C++的函数
- <转>Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- 【Cocos2d-x lua篇005】C++调用Lua的函数
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践