lua绑定
来源:互联网 发布:unix环境高级编程 mobi 编辑:程序博客网 时间:2024/04/28 15:50
1.通过 genbindings.py 绑定
coco2d-x3.10
1.根据 README 选择对应的 NDK
android-ndk-r10c
2.出错找不到libclang
- ./frameworks/cocos2d-x/tools/bindings-generator/clang/cindex.py
第 3395 行改为 : library = cdll.LoadLibrary(“../bindings-generator/libclang/” + self.get_filename())
3.修改 .ini 文件
复制 cocos2dx_controller.ini 修改文件名 cocos2dx_test.ini
修改文件内容:
1. 第一行 [cocos2dx_test]
2. prefix = cocos2dx_test
3. target_namespace = cc 如果没有 target_namespace = 即可,有通过 cc.ClassName 调用
4. headers = %(cocosdir)s/../runtime-src/Classes/ClassName.h %(cocosdir)s/../runtime-src/Classes/ClassName2.h
5. classes = ClassName ClassName2
4.修改 genbindings.py
复制 genbindings.py 修改文件名 genbindings_test.py
修改:cmd_args = {‘cocos2dx_test.ini’ : (‘cocos2dx_test’, ‘lua_cocos2dx_test_auto’), \
}
2.自动绑定
1.通过源码查看 lua 的 api
XMLHttpRequest 为例
1.属性
赋值 xhr.timeout = 10、取值 xhr.timeout
tolua_variable(L, “timeout”, lua_get_XMLHttpRequest_timeout, lua_set_XMLHttpRequest_timeout);
只能取值
tolua_variable(L, “timeout”, lua_get_XMLHttpRequest_timeout, nullptr);
2.函数
xhr:open()
tolua_function(L, “open”, lua_cocos2dx_XMLHttpRequest_open);
3.查看参数个数
- lua 通过 send 方法调用 xhr:send() 或 xhr:send(“参数”) lua文件
- 执行 lua_cocos2dx_XMLHttpRequest_send 自动生成cpp文件
if ( 1 == argc )
判断如果有一个参数,没有参数执行下面的 自动生成cpp文件- 通过 LuaMinXmlHttpRequest 对象调用此类里的方法 自己写的cpp文件
static int lua_cocos2dx_XMLHttpRequest_send(lua_State* L){ int argc = 0; LuaMinXmlHttpRequest* self = nullptr; //std::string data = ""; const char* data = NULL; size_t size = 0;#if COCOS2D_DEBUG >= 1 tolua_Error tolua_err; if (!tolua_isusertype(L,1,"cc.XMLHttpRequest",0,&tolua_err)) goto tolua_lerror;#endif self = (LuaMinXmlHttpRequest*) tolua_tousertype(L,1,0);#if COCOS2D_DEBUG >= 1 if (nullptr == self) { tolua_error(L,"invalid 'self' in function 'lua_cocos2dx_XMLHttpRequest_send'\n", nullptr); return 0; }#endif self->getHttpHeader().clear(); self->setErrorFlag(false); argc = lua_gettop(L) - 1; if ( 1 == argc ) {#if COCOS2D_DEBUG >= 1 if (!tolua_isstring(L, 2, 0, &tolua_err)) goto tolua_lerror;#endif //data = tolua_tostring(L, 2, ""); data = (const char*) lua_tolstring(L, 2, &size); } if (size > 0 && (self->getMethod().compare("post") == 0 || self->getMethod().compare("POST") == 0 || self->getMethod().compare("put") == 0 || self->getMethod().compare("PUT") == 0 )&& nullptr != self->getHttpRequest()) { self->getHttpRequest()->setRequestData(data,size); } self->_setHttpRequestHeader(); self->_sendRequest(); return 0;#if COCOS2D_DEBUG >= 1tolua_lerror: tolua_error(L,"#ferror in function 'lua_cocos2dx_XMLHttpRequest_send'.",&tolua_err); return 0;#endif}
3.自动绑定回调函数
找到 lua_cocos2d-x_manual.cpp 文件,
1.先要注册
把MenuItem替换成你要绑定的类 MyClass
1. MenuItem* cobj = nullptr;
2. if (!tolua_isusertype(tolua_S,1,”cc.MenuItem”,0,&tolua_err)) goto tolua_lerror;
3. cobj = static_cast
static int tolua_cocos2d_MenuItem_registerScriptTapHandler(lua_State* tolua_S){ if (NULL == tolua_S) return 0; int argc = 0; MenuItem* cobj = nullptr;#if COCOS2D_DEBUG >= 1 tolua_Error tolua_err; if (!tolua_isusertype(tolua_S,1,"cc.MenuItem",0,&tolua_err)) goto tolua_lerror;#endif cobj = static_cast<cocos2d::MenuItemImage*>(tolua_tousertype(tolua_S,1,0));#if COCOS2D_DEBUG >= 1 if (nullptr == cobj) { tolua_error(tolua_S,"invalid 'cobj' in function 'tolua_cocos2d_MenuItem_registerScriptTapHandler'\n", NULL); return 0; }#endif argc = lua_gettop(tolua_S) - 1; if (1 == argc) {#if COCOS2D_DEBUG >= 1 if (!toluafix_isfunction(tolua_S,2,"LUA_FUNCTION",0,&tolua_err)) { goto tolua_lerror; }#endif LUA_FUNCTION handler = toluafix_ref_function(tolua_S,2,0); ScriptHandlerMgr::getInstance()->addObjectHandler((void*)cobj, handler, ScriptHandlerMgr::HandlerType::MENU_CLICKED); return 0; } luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d\n", "cc.MenuItem:registerScriptTapHandler",argc, 1); return 0;#if COCOS2D_DEBUG >= 1tolua_lerror: tolua_error(tolua_S,"#ferror in function 'tolua_cocos2d_MenuItem_registerScriptTapHandler'.",&tolua_err); return 0;#endif}
2.回调注册的函数
LuaEngine::getInstance()->getLuaStack()->pushString(backTag.c_str());LuaEngine::getInstance()->getLuaStack()->executeFunctionByHandler("回调对象", 参数个数);LuaEngine::getInstance()->getLuaStack()->clean();//移除注册函数ScriptHandlerMgr::getInstance()->removeObjectHandler("回调对象", ScriptHandlerMgr::HandlerType::MENU_CLICKED);
- lua绑定
- cocos2dx的lua绑定
- 实现LUA绑定器-
- cocos2dx的lua绑定
- cocos2dx的lua绑定
- Lua绑定C++类
- cocos2dx 3.2 lua绑定
- Cocos2dx(3.3)绑定lua
- C++绑定到Lua
- cocos2dx的lua绑定
- cocos2dx3.x lua绑定
- 自动绑定lua
- lua 绑定c++
- Cocos2dx lua绑定C++
- cocos2dx lua绑定
- cocos2dx C++绑定lua
- C++绑定lua
- Lua绑定C++类
- XCode 7上传遇到ERROR ITMS-90535 Unexpected
- AIO
- 【Android】自定义View
- (jquery.validate.unobtrusive.js)
- React 简介
- lua绑定
- c++实验2标准体重
- c++实验2-标准体重
- shape和selector和layer-list的(详细说明)
- 正则表达式
- tar使用
- 【Thinking in Java】二:一切都是对象
- WindowManager.LayoutParams
- Github搜索技巧-如何使用github找到自己感兴趣的项目