您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx 3.0 开荒笔记 ---- 3.0的lua绑定

2014-05-20 17:32 323 查看
研究3.0也有一段时间了,从RC0出来开始就不断研究,发现变化还是不少,并且遇到不少的问题。如今正试着做一个基于3.0的游戏项目,遇到各种坑爹的问题,如果不用博客记录下来,很有可能下次再遇到的时候就会记不起来怎么回事了,于是乎笔者就兴致勃勃地来记笔记了。

关于用3.0创建项目之类的,网上已经有很多相关的教程了,这里就不再赘述。另外笔者目前是在win32平台下做测试,所以可能在其他平台会有什么疏漏的地方也许会略过,到时候还请多多包涵了。

3.0刚出来的时候,我就兴致勃勃地写了一套简单的框架,准备绑定到lua中使用,后来发现3.0绑定lua的方式完全变了,网上也找不到什么资料,于是乎果断去阅读了一些readme类似的东西,在cocos2d-x/tools/tolua的目录下 有一个README.mdown,用记事本打开后,里面简单讲解了3.0绑定lua的过程(也太简单了吧。。),先贴出来再说。

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/cocos2d-x/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>


由于笔者是在windows下绑定的。所以来看on Windows这一块。

* Make sure that you have installed `android-ndk-r9b`.
好吧,经过几番折腾,首先貌似必须要是r9b版本才行,最新的r9d貌似是不行的,相关下载请自行百度。32位和64位的不知道有没有影响,反正笔者用的是32位的

* Download python2.7.3 (32bit) from (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi).
2.7.3,我怎么记得之前是2.7.5,2.7.5也是没啥问题的。

* Add the installed path of python (e.g. C:\Python27) to windows environment variable named 'PATH'.
把python加入环境变量,是为了能在cmd执行python命令

* 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/cocos2d-x/download/downloads/Cheetah.zip, unzip it to "C:\Python27\Lib\site-packages"
下载解压 不多说了

* Set environment variables (`NDK_ROOT`)
把ndk-r9b的目录加入环境变量中,并且命名为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".
这一步是说得灰常简单,但是笔者整整搞了N天的东西。genbindings.py是绑定cocos2dx自带的api的python脚本。当然笔者需要绑定的是自己写的一套简单的框架,所以当然要自己配置ini文件,还有修改python脚本咯。

3.0里面是通过一个.ini的文件来设置绑定哪些内容的,tolua的目录下有很多cocos2dx的ini文件,可以自己打开记事本瞅瞅,相当复杂,不过没关系,我们来看看绑定的整个过程。

先参考一篇大牛的文章,这里给出传送门:http://www.cocoachina.com/bbs/read.php?tid=196416

假设我们已经按照大牛给出的方法,绑定了之后如果出错了,那么这里再给出一篇大牛的文章:http://www.cocoachina.com/bbs/read.php?tid=196037

一般来说,遇到的问题都能从以上两篇文章里面得到解决,但是。。。笔者还遇到了其他坑爹的问题,这里记录一下

1. 首先看下这张图



我想应该会有人遇到过一样的问题,但是这里我要说下,这些提示不会影响到你的绑定过程,就算绑定失败,也和这些东西没有关系,笔者还曾经为了这些警告纠结了很久。

2. 不知道有没有人遇到过出现Permission denied(中文系统应该是提示:访问被拒绝)的错误,这个错误也是我郁闷了最久的原因,于是乎我就在python脚本里面一步一步打log,最终发现错误是在这里。

if platform == 'win32':
with _pushd(output_dir):
_run_cmd('dos2unix *')


后来发现dos2unix这个命令,在windows下一直报错,我发现导出的目录下有个叫lua的文件夹,这样的话dos2unix *所有文件会出错。原因不明,如果没有文件夹就没有问题,反正也就生成了两个文件,.hpp和.cpp,分别执行dos2unix命令就好了,改成以下格式

if platform == 'win32':
with _pushd(output_dir):
_run_cmd('dos2unix lua_framework_auto.hpp')
_run_cmd('dos2unix lua_framework_auto.cpp')


里面的lua_framework_auto是我生成的文件的名字,改成你们自己的名字就行了,接下来只要出现success,说明绑定就成功了,开始你的3.0 lua之旅吧

另外说一下,cocos2dx提供的自动绑定不支持模板类的绑定,包括模板类参数等等,所以很多用到Vector或者std::function的api都绑定不上去的,至于如何绑定自定义的事件,有空我会在以后的博文中阐述的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2dx lua