在用 cocos2d-x 的时候,可以把自己的类和 cocos2d-x 的类混在一起,即简单的把自己需要导出的类放到 cocos2d的 pkg 文件中。

网上也有推荐这样的做法,但是这样虽然简单,却让人难以接受。

我选择了比较麻烦的一种,就是自己重新定义 pkg 文件,并且导出了一个独立的cpp文件。摸过一些简单的坑之后,还算比较顺利,只是在pkg文件中没有注意处理 cocos2dnamespace,导致了在lua脚本中,自定义类中获得的比如 CCNode 之类的对象后无法访问其成员函数而已。

具体的原因,因为在cocos2d-x的pkg中,它是删除了namespace的,所以tolua++生成的代码是这样的:

1
tolua_usertype(tolua_S,"CCNode");

而在我的pkg文件中,由于没有处理namespace,生成的代码如下:

1
tolua_usertype(tolua_S,"cocos::CCNode");

这就导致了同一个类在lua脚本中被认为是两个不同的对象。

解决的方法很简单,去掉namespace即可。

Comments