为了使游戏开发更加方便快捷,我继续了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. Eclipse-Java代码规范和质量检查插件-SonarLint

    SonarQube(Sonar)之前的提供的本地工具是需要依赖SonarQube服务器的,这样导致其运行速度缓慢. 新出的SonarLint的扫描引擎直接安装在本地,速度超快,实时探测代码技术债务,给 ...

  2. 携程Apollo(阿波罗)配置中心的Java样例客户端启动和调试

    参考:https://github.com/ctripcorp/apollo/wiki/Apollo%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97#23-java%E6%A0 ...

  3. Windows7下ftp服务器

    1. 创建用户 2. 创建ftp服务 3. 管理ftp站点 4. 权限编辑 5. 绑定iP和端口 6. 访问 7. Java代码上传文件 import java.io.File; import jav ...

  4. jmeter的Classpath即类或者jar包的搜索路径设置

    对于master-slave模式,插件和依赖都需要放到slave上才能生效,并且需要重启slave使插件生效 查看配置文件:apache-jmeter-3.1/bin/jmeter.propertie ...

  5. nodejs连接sqlserver

    nodejs连接sqlserver http://blog.csdn.net/kkkkkxiaofei/article/details/31353091

  6. 传智播客ADO.Net项目开发教程具体解释

    内容简单介绍: 本教程为传智播客.Net培训课堂的现场录像,请到140623ls" target="_blank">传智播客.Net学院下载很多其它免费.Net视频 ...

  7. Java VS .NET:Java与.NET的特点对比 单点登录(SSO)的设计

    一.前言 为什么要写Java跟.NET对比? .NET出生之后就带着Java的影子.从模仿到创新,.NET平台也越来越成熟.他们不同的支持者也经常因为孰弱孰强的问题争论不休.但是本文并不是为了一分高下 ...

  8. JavaScript基础 -- DOM

    一.DOM全称 文档对象模型(Document Object Model) 二.DOM是什么 DOM可以说是制作动态页面的强有力工具.DOM不是JavaScript语言的一部分,而是内置在浏览器中的一 ...

  9. 修改数据表的字符集为utf8mb4

    修改数据表的字符集为utf8mb4

  10. Spring 之AOP 面向切面编程

    AOP相关术语: Joinpoint (连接点):所谓连接点是指那些被拦截到的点,在spring中,这些点指的是方法,因为spring 只支持方法类型的连接点. Pointcut(切入点):所谓切入点 ...