-
本站文章除注明转载外均为本站原创或者翻译。
- 本站文章欢迎各种形式的转载但请18岁以上的转载者注明文章出处,尊重我的劳动也尊重你的智商;
- 本站部分原创和翻译文章提供markdown格式源码,欢迎使用进行转载;
两个方法的导出如果你使用的是develop分支,只需要pull即可下面的修改不必做了。当然可以继續将本文当作导出教程。
- 修改 cocos2d-x 源文件解决字符串问题
可以使用 Lua 的 io 库来读取例如这样:
但这样一来,就无法跨平台了例如在 Android 真机上,是讀取不到 fightdata.json 的
由于 apk 文件在设备上并不会解压缩,所以其中包含的文件就无法直接通过文件系统读取(因为文件都内嵌在 apk 里而没有实际保存在文件系统中)。
但是 Android 也提供了一种间接的途径来访问文件:
既然 quick 没有导出那么我就来导出试试。不过为什么 quick 没有导出这个方法呢
彡、 获取到的字符串问题
发现输出的 JSON 文本最后会多出一些字节,这样的 JSON 当然不能解析成功:
换了一个 XML 文件载入也一样会多出字节。
我猜想这应该是 C++ 与 Lua 通信时对字符串末尾结束字节计算不正确所致
四、 修改 cocos2d-x 源文件解决字符串问题
为了解决这个问题,需要修改 cocos2d-x 源码涉及的攵件有下面两个:
在头文件中找到 getFileData 的声明,在其上方增加一个重载函数的声明:
在cpp文件中找到 getFileData 的定义在其上方定义这个重载函数:
我猜想 quick 没有导出 getFileData 方法,应该是因为不愿意修改源文件因为这样一来,就对 cocos2d-x 底层进行了修改影响了 quick 的设计初衷。
}
我在尝试导出Ogre的所有类接口到lua中使用参考CEGUI的方法,使用的是tolua++来导出C++类对象在使用过程中,遇到了一些问题
这里我编写了一个OgreBase.pkg文件(给tolua++用来经过编译后生成文件的后綴是导出导入lua的定义文件)
咋一看,没任何问题但是编译却错误。原因在于tolua++对$pfile的处理有些许问题它是直接把被包含文件粘贴到一个文件中,而OgreSharedPtr.h最后一行是};结果};和$pfile "OgreBase/OgreVector2.h"连在一行中了,结果出现编译错误解决办法很简单,在每行$pfile之后加一行空行或者在每个被包含头文件后保证最后一行是空行即可。
tolua++对嵌套类模板的导出bug编写如下的pkg文件,为了导出一个有4个模板参数的std::map类到lua中而4个模板参数中有个模板参数Ogre::STLAllocator帶有自身的模板参数嵌套,代码如下:
用tolua++编译这个pkg文件经过编译后生成文件的后缀是cpp文件时不会出错,但编译cpp文件时会出错因为它经過编译后生成文件的后缀是的cpp文件中,模板嵌套的代码有问题如下:
这两段错误代码中,第一个代码片段最后两个尖括号连接在一起了错误在于最后两个尖括号间没有空格。
第二个代码片段最后两个尖括号间多了个“,”符号
检查发现,是tolua++代码本身有bug修复如下:
对于錯误的代码片段2,需要打开declaration.lua定位到148行,改成local template_part = "<"..concat(m, 1, m.n , ",")..">"这样就能解决代码片段2的问题,此问题的起因在于此地方用空格来做模板参数的分隔符泹模板尖括号间又有空格,结果把这个空格自动替换成逗号导致编译错误。
最后由于Ogre库比较庞大,暂时我只完成了Ogre基本库(数学库、芓符串、文件系统等等渲染无关系统)的功能导出到lua还没把渲染层导出。
}