quick3.6 lua-binding

参考文章 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.py
cmd_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 \


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值