为了使游戏开发更加方便快捷,我继续了protobuf在lua下的尝试。
socket使用的是cocos2dx集成的websocket。
先说下环境:cocos2d-x-2.2.1 + protobuf 2.5.0 +protoc-gen-lua +Python 2.7.5
1.在protobuf目录下依次执行如下命令
[plain] view plain copy pythonsetup.pybuild pythonsetup.pyinstall2.在protoc-gen-lua目录下的plugin目录中新建protoc-gen-lua.bat文件,并将如下内容粘贴到里面 [plain] view plain copy @python<你的目录>\protoc-gen-lua\plugin\protoc-gen-lua
3.生成protobuf对应的lua文件,执行如下命令: [plain] view plain copy <你的路径>/protoc.exe--lua_out=./--plugin=protoc-gen-lua="<你的路径>\protoc-gen-lua\plugin\protoc-gen-lua.bat"test.proto 执行完后就会生成test_pb.lua文件。
4.使用cocos2dx的create_project.py创建lua工程;
5.将protoc-gen-lua/protobuf目录下的pb.c文件复制到lua工程的Classes目录下,并加入到C++工程中;
6.将protoc-gen-lua/protobuf目录下的所有lua文件复制到lua工程的Resources目录下;
7.编辑AppDelegate.cpp文件,添加如下代码:
[cpp] view plain copy extern"C"{ #include<lua.h> #include<lualib.h> #include<lauxlib.h> intluaopen_pb(lua_State*L); }8.在AppDelegate::applicationDIDFinishLaunching()方法中加入初始化方法: [cpp] view plain copy luaopen_pb(tolua_s);
9.此时对lua工程进行编译,如果出错,请检查并修正;编译通过,并且可以正常运行后继续下面的步骤;
10.cocos2dx默认产生的lua工程包含2个文件hello.lua与hello2.lua,打开hello2.lua,将如下内容添加到文件末尾(因为我使用的是websocket,各位可根据自己的实际情况进行修改):
[JavaScript] view plain copy localwsProtobuf=nil functiontestProtobuf() wsProtobuf=WebSocket:create("ws://localhost:8080/web") localfunctiononopen(strData) print("socketopen...") require"test_pb" localmsg=test_pb.Message() msg.ID=101 localperson=test_pb.Person() person.ID=111 person.name="user1" person.email="a1@a.a" msg.data=person:SerializetoString() localpb_data=msg:SerializetoString() localt={string.byte(pb_data,1,-1)} wsProtobuf:sendBinaryMsg(t,table.getn(t)) end localfunctiononMessage(strData) print("socketmessage...") end localfunctiononClose(strData) print("socketclose...") end localfunctiononError(strData) print("socketerror") end ifnil~=wsProtobufthen wsProtobuf:registerScriptHandler(onopen,kWebSocketScriptHandlerOpen) wsProtobuf:registerScriptHandler(onMessage,kWebSocketScriptHandlerMessage) wsProtobuf:registerScriptHandler(onClose,kWebSocketScriptHandlerClose) wsProtobuf:registerScriptHandler(onError,kWebSocketScriptHandlerError) end end 11.然后在hello.lua中调用testProtobuf()函数即可。测试运行,你可以在服务器端查看收到的消息。 总结以上是内存溢出为你收集整理的cocos2dx使用lua和protobuf全部内容,希望文章能够帮你解决cocos2dx使用lua和protobuf所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)