关于quick-cocos2d-x新建自定义类绑定失败的处理方法

来源:互联网 发布:java中public方法 编辑:程序博客网 时间:2024/06/16 03:03
先把quick-cocos2d-x绑定自定义类的流程简单写一下
1.用quick-cocos2d-x自带的Player3.exe创建工程,或者用cocos ide创建工程
2.打开frameworks\runtime-src\proj.win32下的工程文件,重新编译一遍,应当可以编译通,注意生成程序的文件名与默认不同
3.新建自己的类,位置放在frameworks\runtime-src\Classes\quick-src\extra下,编译一下
4.修改runtime-src\Classes\quick-src\extra\luabinding\cocos2dx_extra_luabinding.tolua文件,开头增加$#include "mylib/MyClass.h",后面增加自己的类定义
5.执行frameworks\runtime-src\Classes\quick-src\extra\luabinding\build.bat
6.重新编译工程
7.这样在自己的Lua代码中就可以调用自定义类的函数了
如果是静态函数,就是cc.类名:函数名,比如cc.MyClassA:GetResult(2, 2)
如果不是静态函数,需要先建一个create静态函数,里面返回自己类的指针,然后用该指针才能调用成员函数
例如:
c++
MyClassA *MyClassA::create()
{
MyClassA *request = new MyClassA();


return request;
}


lua
local myClassA = cc.MyClassA:create()
print(myClassA:GetMyResult(2, 2))


8.为了调用更规范,创建一个对应的Lua类,把cc.MyClassA这种操作封装到该类中,就可以像其它类一样使用了 




结果发现在第6步编译时提示出错
2>cocos2dx_extra_luabinding.obj : error LNK2019: 无法解析的外部符号 _toluafix_ref_function,该符号在函数 "int __cdecl tolua_cocos2dx_extra_luabinding_HTTPRequest_createWithUrl00(struct lua_State *)" (?tolua_cocos2dx_extra_luabinding_HTTPRequest_createWithUrl00@@YAHPAUlua_State@@@Z) 中被引用
2>cocos2dx_extra_luabinding.obj : error LNK2019: 无法解析的外部符号 _toluafix_isfunction,该符号在函数 "int __cdecl tolua_cocos2dx_extra_luabinding_HTTPRequest_createWithUrl00(struct lua_State *)" (?tolua_cocos2dx_extra_luabinding_HTTPRequest_createWithUrl00@@YAHPAUlua_State@@@Z) 中被引用
2>C:\workspace\QuickGame2\frameworks\runtime-src\proj.win32\../../../runtime/win32/QuickGame2.exe : fatal error LNK1120: 2 个无法解析的外部命令
即便不新建自己的类,直接执行build.bat,也会无法编译通


新建一个工程,用文件比较工具比较原始的runtime-src\Classes\quick-src\extra\luabinding目录,和重新生成的同目录,发现代码有所不同
比如原始代码是
extern "C" {
#include "lua.h"
#include "tolua++.h"
}
#include "tolua_fix.h"


新生成的变成
extern "C" {
#include "lua.h"
#include "tolua++.h"
#include "tolua_fix.h"
}


虽然不是非常清楚其中的区别,但是这部分修改明显和我新加的类无关。
经过比较两个文件夹,把和我新加的类以外的代码改成原始代码后,编译正常。
0 0
原创粉丝点击