cocos2dx3.0中将自定义类导出为lua对象

按照http://www.cocoachina.com/bbs/read.php?tid=196416&fpage=6&page=1的方法在3.0版本上做自定义类的导出,总是出现各种问题。经过一天的调试,终于搞好,分享如下:

1、
安装必要的库和工具包,以及配置相关环境变量

可以按照cocos2d-x-3.0\tools\tolua\README.mdown中的介绍,不过不够全面。

a、下载安装python2.7.3 (32bit) (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi).

b、下载安装pyyaml(http://pyyaml.org/download/pyyaml/PyYAML-3.10.win32-py2.7.exe)

c、下载Cheetah,并进入目录执行setup.py build和setup.py install

d、下载dos2unix.exe放入系统system32目录

2、
写c++类
(
Classes
Network
.cpp)
。需要注意的是,该类必须继承自cocos2d::Ref

3、
编写
python脚本。进入目录cocos2d-x-3.0\tools\tolua,复制一份genbindings.py命名为genbindings_network.py,编辑genbindings_network.py,把

output_dir = ’s/cocos/scripting/lua-bindings/auto' project_root

改成

output_dir = ’s/../runtime-src/Classes/network' project_root

修改命令参数,把cmd_arg改成

cmd_args = {network.ini’ : (‘network’, ‘lua_network_auto’) }

4、
编写
network
.ini
。复制一份cocos2dx_spine.ini,重命名为network.ini,修改下面这些内容:

prefix = network

target_namespace=

headers = %(cocosdir)s/…/runtime-src/Classes/Network.h

classes = CNetwork

skip =

abstract_classes =

5、
自动生成代码。打开命令行工具,cd到cocos2d-x-3.0\tools\tolua下,执行

genbindings_network.py

6、
初始化网络模块的lua导出。将生成的lua_network_auto.cpp源码添加到项目工程,编辑AppDelegate.cpp,包含lua_network_auto.hpp头文件,并在LuaEngine* engine = LuaEngine::getInstance();

后面加入

register_all_network(engine->getLuaStack()->getLuaState());

7、
编写lua代码测试。下面是结合protobuf发送网络数据包的测试代码:

    require "person_pb"

local person =person_pb.Person()

person.id=111

person.name=“user1”

person.email=“a1@a.a”

local pb_data = person:SerializeToString()

local network = CNetwork:getInstance();

network:sendMessage(pb_data);

后记:还需要考虑如何在收到服务器回包后通知到lua层,可能得继续参考WebSocket中Event注册机制的实现吧。下一步的预研方向~