参考文章 http://www.aichengxu.com/view/45851
因为版本更新后目录有些不同,所以在此记录一下,本文中的自己的项目不在quick的目录下。
在开始之前备份一下quick,用git之类的管理一下最方便,如果不小心文件生成错了恢复也很快。
1 创建c++文件 MyClass.cpp MyClass.h 于 Quick/cocos/my目录下
MyClass.cpp
#include "MyClass.h"
int MyClass::foo(int i)
{
return i + 100;
}
MyClass.h
#include "cocos2d.h"
using namespace cocos2d;
class MyClass : public Ref
{
public:
MyClass() {};
~MyClass() {};
bool init() { return true; };
CREATE_FUNC(MyClass);
int foo(int i);
};
2 编写.ini文件。在Quick/tools/tolua目录下能看到genbindings.py脚本和一大堆.ini文件,这些就是bindings-generator的实际执行环境了。随便找一个内容比较少的.ini文件,复制一份,重新命名为MyClass.ini。大部分内容都可以凑合不需要改,这里仅列出必须要改的重要部分:
[MyClass]
prefix = MyClass
target_namespace = my
headers = %(cocosdir)s/cocos/my/MyClass.h
classes = MyClass
3 修改genbindings.py文件 129行附近,将MyClass.ini文件加进去:
Quick/tools/tolua/genbindings.pycmd_args = {'cocos2dx.ini' : ('cocos2d-x', 'lua_cocos2dx_auto'), \
'MyClass.ini' : ('MyClass', 'lua_MyClass_auto'), \
...
4 在控制台进入Quick/tools/tolua/ 目录 ,运行genbindings.py
此时如果python的库没有装好可能会报错,找不到yaml和Cheetah.Template,去下载相应的库即可。注意用的版本是python2.7和ndk9,可能也有变动,具体参考Quick/tools/tolua/README.mdown文件。
如果成功运行,会在 Quick/cocos/scripting/lua-bindings/auto 目录下生成lua_MyClass_auto.cpp和lua_MyClass_auto.hpp两个文件,在Quick/cocos/scripting/lua-bindings/auto/api 下生成lua_MyClass_auto_api.lua和MyClass.lua两个文件。
注意,每次运行完成,其他的文件也会做出修改,这时重新编译项目可能会出错。所以往往我都是把之前的所有文件备份一下,只用生成的lua_MyClass_auto.cpp和lua_MyClass_auto.hpp等新加的几个文件,其余的修改文件都删掉,用备份的文件,新手的做法。如果新修改的文件没有问题,就可以忽视这一部分。
在自己项目中,项目名/frameworks/runtime-src/Classes/下,创建两个文件夹Base和lua-bindings,将MyClass.h和MyClass.cpp放在Base中,将lua_MyClass_auto.cpp和lua_MyClass_auto.hpp放在lua-bindings中。在lua-bindings中建文件夹api,把MyClass.lua放在api中。
5 应该在 项目名/frameworks/runtime-src/Classes/AppDelegate.cpp 中的applicationDidFinishLaunching()注册代码,但是方法里已经有了lua_module_register(L); 所以,我们只用在lua_module_register.h中增加代码注册即可。如下
#include "lua-bindings/lua_MyClass_auto.hpp"
lua_module_register()函数中添加
register_all_MyClass(L);
6 测试, 在main.lua文件中
local test = my.MyClass:create()
print("lua bind: " .. test:foo(99)
7 Android.mk
真机运行时,编译项目之前,要在 \frameworks\runtime-src\proj.android\jni\Android.mk 中做修改
LOCAL_SRC_FILES := hellolua/main.cpp \
../../Classes/VisibleRect.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/Base/MyClass.cpp \