按照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注册机制的实现吧。下一步的预研方向~