cocos2d-x bindings-generator(lua调用c++)

 
How to Use bindings - generator
==================

On Windows:
------------

* Make sure that you have installed `android-ndk - r9b`.
* Download python2.7.3 (32bit) from (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi).
* Add the installed path of python (e.g. C:\Python27) to windows environment variable named 'PATH' .
* Download pyyaml from http://pyyaml.org/download/pyyaml/PyYAML - 3.10.win32 - py2.7.exe and install it.
* Download pyCheetah from https://raw.github.com/dumganhar/my_old_cocos2d - x_backup/download/downloads/Cheetah.zip, unzip it to "C:\Python27\Lib\site-packages"
* Set environment variables (`NDK_ROOT`)
* Go to "cocos2d-x/tools/tolua" folder, and run "genbindings.py" . The generated codes will be under "cocos\scripting\auto-generated\js-bindings" .


On MAC:
----------

* The OSX 10.9 has a built -in python2.7 and if your os don't have python2.7 then use [Homebrew](http://brew.sh/) to install the python and use pip install the python dependencies.
<pre>
                brew install python
</pre>

* Install python dependices by pip.
<pre>
    sudo easy_install pip
    sudo pip install PyYAML
                sudo pip install Cheetah
</pre>
   
* Download [64bit ndk-r9b-x86_64](http://dl.google.com/android/ndk/android-ndk-r9b-darwin-x86_64.tar.bz2) from [google](http://developer.android.com/tools/sdk/ndk/index.html)
* Run
<pre>
                export NDK_ROOT=/path/to/android - ndk - r9b
    ./genbindings.py
</pre>


On Ubuntu Linux 12.04 64bit
------------

* Install python
<pre>
                sudo apt - get install python2.7
</pre>
* Install python dependices by pip.
<pre>
                sudo apt - get install python - pip
                sudo pip install PyYAML
                sudo pip install Cheetah
</pre>
* Download [64bit ndk-r9b-x86_64]( https://dl.google.com/android/ndk/android-ndk-r9b-linux-x86_64.tar.bz2) from [google](http://developer.android.com/tools/sdk/ndk/index.html)
* Go to "cocos2d-x/tools/tolua" , Run
<pre>
                export NDK_ROOT=/path/to/android - ndk - r9b
    ./genbindings.py
</pre>

1.
首先是自定义的C++类。我习惯将文件保存在frameworks/runtime - src/Classes/目录下:
frameworks/runtime - src/Classes/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);
};

frameworks/runtime - src/Classes/MyClass.cpp
# include "MyClass.h"

int MyClass::foo(int i)
{
  return i + 100;
}

2.
然后编写.ini文件 在frameworks/cocos2d - x/tools/tolua/目录下能看到genbindings.py脚本和一大堆.ini文件,这些就是bindings - generator的实际执行环境了。随便找一个内容比较少的.ini文件,复制一份,重新命名为MyClass.ini。
[MyClass]prefix           = MyClass
target_namespace = my
headers          = %(cocosdir)s/ .. /runtime - src/Classes/MyClass.h
classes          = MyClass

3.
然后修改genbindings.py文件129行附近,将MyClass.ini文件加进去:
cmd_args = { 'cocos2dx.ini' : ( 'cocos2d-x' , 'lua_cocos2dx_auto' ), \
            'MyClass.ini' : ( 'MyClass' , 'lua_MyClass_auto' ), \
            ...

4.
执行genbindings.py脚本:
python genbindings.py

会碰到一系列报错:
>1.
android_headers = - I%(androidndkdir)s/platforms/android - 14/arch - arm/usr/include - I%(androidndkdir)s/sources/cxx - stl/gnu - libstdc++/4.7/libs/armeabi - v7a/include - I%(androidndkdir)s/sources/cxx - stl/gnu - libstdc++/4.7/include - I%(androidndkdir)s/sources/cxx - stl/gnu - libstdc++/4.8/libs/armeabi - v7a/include - I%(androidndkdir)s/sources/cxx - stl/gnu - libstdc++/4.8/include
由于使用不同的ndk,所以,有些是没有4.7的,而是有4.8的,这个要注意。
>2.
”dos2unix 不是内部或外部命令... . ..
进入frameworks\cocos2d-x\t oo ls\bindings - generator\tools\win32
看是否有dos2unix.exe,应该是没有的,
然后进入cocos2d-x-3.3\tools\bindings - generator\tools\win32中
将dos2unix.exe复制到没有的那个文件夹,就ok了

>3.
千万要注意,自己写的类本身到底有没有问题,
看仔细,提示信息。


5.
我这边有个libluacocos2d的依赖项
所以把新增的两个文件.cpp和.hpp拖到vs中的libluacocos2d中
然后右击,仅用于项目,仅生成libluacocos2d
>1.
提示include“MyClass.h”出错
原因,这里要直接指明具体路径,
如:
# include "../runtime-src/Classes/MyClass/MyClass.h"
我不知道为什么我这 边只用一个../就可以了

6.在AppDelegate.cpp中
添加include "lua_MyClass_auto.hpp"

7.找到lua_MyClass_auto.cpp,里面有注册函数名字为“register_all_MyClass()”,这就是将MyClass注册进lua环境的关键函数
在APPDelegate.cpp
中加入
lua_State* L = engine - >getLuaStack() - >getLuaState();
register_all_MyClass(L);
这样就完成啦。

8.使用生成的函数
local ok = my.MyClass:create()
print ( "lua bind: " .. ok:foo(99))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值