为了使游戏开发更加方便快捷,我继续了protobuf在lua下的尝试。

socket使用的是cocos2dx集成的websocket。

先说下环境:cocos2d-x-2.2.1 + protobuf 2.5.0 + protoc-gen-lua + Python 2.7.5

1.在protobuf目录下依次执行如下命令

  1. python setup.py build
  2. python setup.py install

2.在protoc-gen-lua目录下的plugin目录中新建protoc-gen-lua.bat文件,并将如下内容粘贴到里面

  1. @python <你的目录>\protoc-gen-lua\plugin\protoc-gen-lua

3.生成protobuf对应的lua文件,执行如下命令:

  1. <你的路径>/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文件,添加如下代码:

  1. extern "C"{
  2. #include <lua.h>
  3. #include <lualib.h>
  4. #include <lauxlib.h>
  5. int luaopen_pb (lua_State *L);
  6. }

8.在AppDelegate::applicationDidFinishLaunching()方法中加入初始化方法:

  1. luaopen_pb(tolua_s);

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

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

  1. local wsProtobuf=nil
  2. function testProtobuf()
  3. wsProtobuf = WebSocket:create("ws://localhost:8080/web")
  4. local function onOpen(strData)
  5. print("socket open ...")
  6. require "test_pb"
  7. local msg=test_pb.Message()
  8. msg.id=101
  9. local person =test_pb.Person()
  10. person.id=111
  11. person.name="user1"
  12. person.email="a1@a.a"
  13. msg.data=person:SerializeToString()
  14. local pb_data = msg:SerializeToString()
  15. local t={string.byte(pb_data,1,-1)}
  16. wsProtobuf:sendBinaryMsg(t,table.getn(t))
  17. end
  18. local function onMessage(strData)
  19. print("socket message ...")
  20. end
  21. local function onClose(strData)
  22. print("socket close ...")
  23. end
  24. local function onError(strData)
  25. print("socket error")
  26. end
  27. if nil ~= wsProtobuf then
  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()函数即可。

测试运行,你可以在服务器端查看收到的消息。

cocos2dx使用lua和protobuf的更多相关文章

  1. Cocos2d-x下Lua调用自定义C++类和函数的最佳实践[转]

    Cocos2d-x下Lua调用C++这事之所以看起来这么复杂.网上所有的文档都没讲清楚,是因为存在5个层面的知识点: 1.在纯C环境下,把C函数注册进Lua环境,理解Lua和C之间可以互相调用的本质 ...

  2. 【转】Cocos2d-x下Lua调用自定义C++类和函数的最佳实践

    转自:http://segmentfault.com/blog/hongliang/1190000000631630 关于cocos2d-x下Lua调用C++的文档看了不少,但没有一篇真正把这事给讲明 ...

  3. 《Cocos2d-x实战 Lua卷》上线了

    感谢大家一直以来的支持!各大商店均开始销售:京东:http://item.jd.com/11659697.html当当:http://product.dangdang.com/23659810.htm ...

  4. 如何使用ZEROBRANE STUDIO远程调试COCOS2D-X的LUA脚本(转)

    http://www.cocos2d-x.org/docs/manual/framework/native/v2/lua/lua-remote-debug-via-zerobrane/zh ZeroB ...

  5. 分析cocos2d-x的lua项目中的工具方法

    在创建完cocos2d-x的lua项目后.打开项目的Resources中的extern.lua文件.里面有两个用于面向对象的方法.一个是用于克隆,一个是用于继承. 代码分析例如以下 --克隆一个对象 ...

  6. cocos2dx 3.x 集成protobuf

    vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程也可参考. 主要参考博文地址<cocos2dx 3.x C++搭建protobuf环 ...

  7. 【转】cocos2dx 3.x 集成protobuf

    http://www.cnblogs.com/chevin/p/6001872.html vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程 ...

  8. cocos2d-x的lua脚本加载CocostudioUI两种方式

    前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ...

  9. cocos2dx的lua绑定

    一.cocos2dx对tolua++绑定的修正 A.c对lua回调函数的引用 在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟.菜单选择等).如果采用脚本方式编写游戏的话,这些回调函 ...

随机推荐

  1. MyBatis实体属性与表的字段不对应的解决方案

    1.通过在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上,这种方式是通过在SQL语句中定义别名来解决字段名和属性名的映射关系的. ...

  2. 旧瓶新酒之ngx_lua & fail2ban实现主动诱捕

    服务器承担着业务运行及数据存储的重要作用,因此极易成为攻击者的首要目标.如何对业务服务器的安全进行防护,及时找出针对系统的攻击,并阻断攻击,最大程度地降低主机系统安全的风险程度,是企业安全从业人员面临 ...

  3. 智能社区--HI3516C可视门禁研发出来咯

    铝壳.非常大气的外壳. 200W像素,HI3516C,携带server.创新的产品.欢迎交流:QQ237753582 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5u ...

  4. js逻辑执行判断

    两个变量或者函数,如果与的关系,a && b,如果a是真则在运行b,如果a是假则不运行b了:如果是或的关系,前者是真则不运行后边的了,否则反过来. 举个例子: <span cla ...

  5. powershell 的版本号所引起的载入 FSharp 编译器问题

    powershell 的版本号所引起的载入 FSharp 编译器问题 在 64 位的系统下,大部分系统文件都有 64 位和 32 位的版本号:通常在C:\WINDOWS\system32 下的是 64 ...

  6. org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not

    遇到这个问题之前,我去百度和谷歌去搜索了一下.发现各种说法.可是针对我的项目而言,也就是公司的项目而言,这个问题的根源并不是是网上所说的那样. 最后是通过自己的想法做測试得到了解决. 1.首先说说我的 ...

  7. Spring Boot Controller

    接上篇文章.HelloWorld程序中我们已经创建了一个HellController,里面包括了响应JSON的方法.本文针对Controller再做一下解说. 回想上篇文章,我们在Controller ...

  8. window环境下在anconda中安装opencv

    今日学习CNN神经网络,在用keras框架下搭建一个简单的模型的时候需要import cv2,我尝试了一下几种方法: 1. 在prompt输入 pip intall opencv-python 出现如 ...

  9. 【POJ 3070】 Fibonacci

    [题目链接]            点击打开链接 [算法]           矩阵乘法快速幂 [代码] #include <algorithm> #include <bitset& ...

  10. bzoj4870

    http://www.lydsy.com/JudgeOnline/problem.php?id=4870 矩阵快速幂... 人话题意:从nk个物品里选模k余r个物品,问方案数模P 那么我们有方程 f[ ...