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))