加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx使用lua和protobuf

发布时间:2020-12-14 21:22:52 所属栏目:百科 来源:网络整理
导读:http://blog.csdn.net/weyson/article/details/17024325 为了使游戏开发更加方便快捷,我继续了protobuf在lua下的尝试。 socket使用的是cocos2dx集成的websocket。 先说下环境:cocos2d-x-2.2.1 + protobuf 2.5.0 +protoc-gen-lua +Python 2.7.5 1.在protobu

http://blog.csdn.net/weyson/article/details/17024325

为了使游戏开发更加方便快捷,我继续了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
  1. pythonsetup.pybuild
  2. pythonsetup.pyinstall

2.在protoc-gen-lua目录下的plugin目录中新建protoc-gen-lua.bat文件,并将如下内容粘贴到里面
[plain] view plain copy
  1. @python<你的目录>protoc-gen-luapluginprotoc-gen-lua

3.生成protobuf对应的lua文件,执行如下命令:
[plain] view plain copy
  1. <你的路径>/protoc.exe--lua_out=./--plugin=protoc-gen-lua="<你的路径&gt;protoc-gen-luapluginprotoc-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
  1. extern"C"{
  2. #include<lua.h>
  3. #include<lualib.h>
  4. #include<lauxlib.h>
  5. intluaopen_pb(lua_State*L);
  6. }

8.在AppDelegate::applicationDidFinishLaunching()方法中加入初始化方法:
[cpp] view plain copy
  1. luaopen_pb(tolua_s);

9.此时对lua工程进行编译,如果出错,请检查并修正;编译通过,并且可以正常运行后继续下面的步骤;

10.cocos2dx默认产生的lua工程包含2个文件hello.lua与hello2.lua,打开hello2.lua,将如下内容添加到文件末尾(因为我使用的是websocket,各位可根据自己的实际情况进行修改):

[javascript] view plain copy
  1. localwsProtobuf=nil
  2. functiontestProtobuf()
  3. wsProtobuf=WebSocket:create("ws://localhost:8080/web")
  4. localfunctiononOpen(strData)
  5. print("socketopen...")
  6. require"test_pb"
  7. localmsg=test_pb.Message()
  8. msg.id=101
  9. localperson=test_pb.Person()
  10. person.id=111
  11. person.name="user1"
  12. person.email="a1@a.a"
  13. msg.data=person:SerializeToString()
  14. localpb_data=msg:SerializeToString()
  15. localt={string.byte(pb_data,1,-1)}
  16. wsProtobuf:sendBinaryMsg(t,table.getn(t))
  17. end
  18. localfunctiononMessage(strData)
  19. print("socketmessage...")
  20. end
  21. localfunctiononClose(strData)
  22. print("socketclose...")
  23. end
  24. localfunctiononError(strData)
  25. print("socketerror")
  26. end
  27. ifnil~=wsProtobufthen
  28. wsProtobuf:registerScriptHandler(onOpen,kWebSocketScriptHandlerOpen)
  29. wsProtobuf:registerScriptHandler(onMessage,kWebSocketScriptHandlerMessage)
  30. wsProtobuf:registerScriptHandler(onClose,kWebSocketScriptHandlerClose)
  31. wsProtobuf:registerScriptHandler(onError,kWebSocketScriptHandlerError)
  32. end
  33. end
11.然后在hello.lua中调用testProtobuf()函数即可。测试运行,你可以在服务器端查看收到的消息。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读