在使用tolua导出c++类的过程中遇到了很多坑,现在详细记录下来,免得在采坑。
cocos前期准备:
- windows10系统
- 下载coco2dx源码,我下载的是3.17.2,这个在官网下载即可。配置cocos环境,此步骤后检查cocos环境变量是否已经配置好,包括:COCOS_CONSOLE_ROOT,COCOS_TEMPLATES_ROOT,COCOS_X_ROOT
- 使用cocos命令创建lua项目,这个网上有很多指导,此处不说明。我的创建的项目名是cocos-lua-pro01。
- 编写c++类,类文件名是ManagerMainExport.h,我的是如下示例:
class ManagerSubExport
{
public:
static ManagerSubExport* create();
//获取并解析启动运行参数
static std::string getStartUpJsonParams();
//连接ip和port
virtual bool startTcp(char* ip, int port) { return false; };
//停止并释放tcp
virtual bool stopTcp() { return false; };
//发送data到sock
virtual bool sendMsgToMain(char* data, int len) { return false; };
//注册lua回调,接收缓存中有数据时会调用回调
virtual void registerLuaCallback(int recvFun, int exitFun) {};
virtual void setUId(int uId) {};
virtual void retainInstance() {};
virtual void releaseInstance() {};
};
正式开始tolua使用:
tolua环境准备:
- 打开项目cocos-lua-pro01\frameworks\cocos2d-x\tools\tolua\README.mdown文档:
我的是在windows10下,因此参考On Windows栏说明,总结上述文档的说明,依次需要安装一下环境:
- 下载安装android-ndk-r16,官网下载:不受支持的 NDK 下载 | Android NDK | Android Developers,选择windows 32位的。创建并配置环境变量NDK_ROOT,值D:\NDK\android-ndk-r16b-windows-x86\android-ndk-r16b
- 下载并安装Python2.7.3,直接访问文档中的地址下载。安装完成后,需要将Python的路径添加到系统环境变量PATH中。
- 安装Python的pip包,Python2.7需要另外安装pip,参考Python2.7.2 安装pip记录_python2.7安装pip 9版本-CSDN博客完成安装,将C:\Python27\Scripts添加到环境变量PATH。
- 下载安装pyyaml,访问文档中路径直接下载,默认安装即可。
- 下载Cheetah,访问文档路径下载,解压,打开cmd,进入解压目录Cheetah-2.4.4\Cheetah-2.4.4,依次执行命令‘python setup.py build` 和 'python setup.py install'。成功后,使用会出现警告:“You don't have the C version of NameMapper installed!”,参考Cheetah使用出错!You don't have the C version of NameMapper installed!_the version of c&c 3 tiberium wars you have instal-CSDN博客文档得以解决:访问Cheetah3 · PyPI下载Cheetah3-3.2.4-cp27-cp27m-win32.whl,打开cmd使用命令“pip install Cheetah3-3.2.4-cp27-cp27m-win32.whl”完成安装后,不会再出现警告。
开始使用tolua编译导出c++类:
- 进入项目tulua路径:E:\work\cocos-lua-pro01\frameworks\cocos2d-x\tools\tolua,复制备份cocos2dx.ini和genbindings.py,重命名MutiWinManager.ini和genbindings_myclass.py(名字可随便取)。
打开ini进行编辑:下图4处红色方框的内容需要修改,其余不变,
第1、2处和ini文件名相同,文件名也可和c++类名相同,第3处填写需要导出的c++类文档路径,多个文件用空格隔开,第4处填写需要导出的类名(有时候文件名和类名不同),之后导出第4处的类,多个类用空格隔开。
打开py文件编辑:下图重要的2处红色方框内的内容比较重要,第1处是导出成功后生成的h和cpp文件存放的路径,我没有修改它,第2处需要修改,改成自己的ini文件名,我的是MutiWinManager.ini,后面括号中的内容,前面的是ini文件上图第1处的值(必须与上面第1处值相同),后面是生成的h和cpp文件名(可修改)。
2. 编辑完成后,打开cmd,进入ini目录:E:\work\cocos-lua-pro01\frameworks\cocos2d-x\tools\tolua,执行命令“python genbindings_myclass.py”(根据你自己重命名的py调整命令)。成功后即在上图第1处的路径下生成对应的h和cpp文件。