之前并没有接触到Lua,尤其现在cocos2dx 渐渐的以Lua和JS开发较多,所以最近就学着对Lua绑定自定义类,中间也是碰到很多问题,记录下分享出来,后面碰到还是可以解决的。
- 开发环境:
下面这些都是在Mac上通过 pip 安装
cocos2dx版本:3.13
NDK版本:R9B
PyYAML版本:3.12
Cheetah 版本:2.4.4
上面的所需的系统环境可以在:
/Fun/frameworks/cocos2d-x/tools/tolua/README.mdown
第一个Fun这个是项目的名称,在这个README文件中提出了所需的环境。不过这个里面是一个坑啊!!!他在这里面推荐使用的NDK R10C或者以上版本,当你使用这个版本的话编译绑定文件,会编译出错。WTF!!!
在genbindings.py 文件中最上方你可以看到
# genbindings.py
# This script is used to generate luabinding glue codes.
# Android ndk version must be ndk-r9b.
这是一个多么 * * 的问题啊
当你配置完成所需环境以后,然后就可以编写需要提供给Lua使用的C++文件了。
我这边直接在里面添加需要绑定的类。
/Fun/frameworks/runtime-src/Classes/
自定义类的结构
#ifndef AnyLua_hpp
#define AnyLua_hpp
#include "cocos2d.h"
using namespace cocos2d;
class AnyLua
{
public:
AnyLua(){}
~AnyLua(){}
bool init();
std::string getValue();
};
#endif /* AnyLua_hpp */
#include "AnyLua.hpp"
bool AnyLua::init()
{
return true;
}
std::string AnyLua::getValue()
{
return "AnyLua::getValue = 121";
}
接下来也就是一个重要的环节了,修改INI文件。INI文件所在位置:
/LuaClass/frameworks/cocos2d-x/tools/tolua/
在这个文件列表里面找一个复制重命名为AnyLua.ini,修改文件中部分位置
后面就是修改genbindings.py文件,我直接在元文件中进行的修改。
修改文件中的141行的Python的字典数据
cmd_args = {'AnyImageView.ini' : ('AnyImageView','lua_AnyImageView_auto')}
然后在通过终端进入到当前目录:
/Fun/frameworks/cocos2d-x/tools/tolua
执行如下命令行:
python genbindings.py
如果所需环境安装正常,你就可以看到
--------------------------------- Generating lua bindings succeeds. ---------------------------------
当然上面这句是在终端里面显示的,CSDN这边上传图片出现了问题,所以就直接放了一段文字。
执行绑定成功后,我们就可以把文件添加到项目中使用了。
/Fun/frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto/
这个就是输出路径了,同样我们可以在genbindings.py里面修改输出路径
然而到这里并没有结束,就是导入的问题了。
由于在Xcode中添加Class文件要选择
添加Classes一定要选择使用Create groups
添加好文件以后发现报错了,cpp文件中h文件找不到了。相信这个对你没有太大难度,使用相对路径添加上去就好了。 下面就是注册自定义类了,打开AppDelegate.cpp里面添加头文件进行注册就可以使用我们的自定义类了。