游戏开发(六) 之 quick-cocos2dx-lua使用Protobuf_cocos2d-x lua community protobuf-程序员宅基地

技术标签: cocos2d-lua  protobuf  游戏开发之路  

继续开发基础功能:

此博客之后的cocos2dx 统一改成Quick-Cocos2dx-Community , 官方网址

这两天一直在搞 protobuf 的lua使用, 集成了很多次不同版本的,但是在android-build那块 不知道为什么一直不过,后来看了下 quick-lua 里面已经集成了protobuf,浪费了太多时间了,索性就换成 quick 吧

这里我整理了套protobuf的生成工具,自己写了个批处理,使用起来可以一步生成出:.cs .pb .lua 三个类型.

我服务器用的c#所以要一个.cs文件 , 客户端lua使用的是quick-lua提供的 protoc-gen-lua-bin , pb是给集成pbc的人使用的

工具地址 | 使用教程

 

继续说下 在cocos里面 lua 如何使用 protobuf

  1. 先写示例proto文件:base.proto和test.proto
    //消息包 base.proto
    message base_message
    {
    	required uint32 	_type 	= 1;
    	optional bytes		_data 	= 2;
    	optional uint32		_ecode 	= 3;
    }
    
    //客户端->服务器 test.proto
    message c2s_test
    {
    	required string arg1 = 1; // (必要的)
    	optional string arg2 = 2; // (可选的)
    	repeated string arg3 = 3; // 数组
    }
    //服务器->客户端
    message s2c_test
    {
    	optional uint32 arg2 = 1; // (可选的)
    }

     

  2. 使用工具生成lua文件:

  3. 因为quick本身集成了protobuf,所以可以直接进行使用,不像其他的版本,需要自己引入库或者源文件

    function MyApp:encodeProto()
    	local baseMsg = base_pb.base_message()
    	--base文件里的base_message 消息体
    	
    	baseMsg._type = 1
    	--设置数据
    
    	local c2sMsg = test_pb.c2s_test()
    	--test文件里的 c2s_test 消息体
    	c2sMsg.arg1 = "a1"
    	c2sMsg.arg2 = "a2"
    	c2sMsg.arg3:append("a31") --这里是数组的添加方法
    	c2sMsg.arg3:append("a32")
    	c2sMsg.arg3:append("a33")
    
    	local c2sData = c2sMsg:SerializeToString()
    	--这里是对 c2s_test 结构体数据的编码  得到的是二进制
    	baseMsg._data = c2sData
    	--可以看base的_data字段类型bytes , 可以将编码过的结构体数据,赋值到这里
    	return baseMsg:SerializeToString()
    	--然后再次编码 发送给服务器
    end
    function MyApp:decodeClientData(_data)
    	print("收到数据--------------")
    	local recvData = base_pb.base_message()
    	recvData:ParseFromString(_data)
    	--使用base_message结构 解析二进制
    
    	local recvtestData = test_pb.c2s_test()
    	recvtestData:ParseFromString(recvData._data)
    	--使用s2c_test结构去解析
    	print( recvData._type )
    	print( recvtestData.arg1 )
    	print( recvtestData.arg2 )
    	for _,str in ipairs(recvtestData.arg3) do
    		print( str )
    	end
    end

    调用 然后输出打印:

    
    	print("111111111111111111111111")
    	
    	local sendData = self:encodeProto()
    	self:decodeClientData(sendData)
    	
    	print("111111111111111111111111")

  4. 这里就是protobuf的使用

实际使用的时候有个地方,因为如果走http,那base里面的_type 可能就没有用了,因为可以根据协议去使用不同的结构体来解析,

当然看个人喜好你也可以继续使用,_ecode 字段是错误码使用,在收到base以后可以直接收到错误码信息,做相应处理,就不需要解析子结构了.

哦,有个东西要说下, 就是enum, 我之前是会根据协议名定义对应的枚举,但是之前的protolua那块 枚举有问题,不知道库为什么没有生成出来枚举的lua代码, 所以现在的版本就不准备用了

 

可以留言进行沟通和交流

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zyxjx1314/article/details/105906047

智能推荐

MongoDb-GridFs-分片_mongodb对gridfs进行分片-程序员宅基地

文章浏览阅读357次。前置要求MongoDb需要使用Shard方式部署 需要安装好 mongod、mongos、replica set使用GridFs存储文件GridFs存储文件的方式GridFs使用两个集合存储文件:files、chunks。如果不做指定,默认会使用前缀【fs.】files其中files是文件元数据,存储的是文件的一些信息。不建议分片,存储的数据就是一个简单的doc,数据量较小,如果需要使用分片,建议用_id分片。{ "_id" : 文件ObjectId, 【默认索引字段】_mongodb对gridfs进行分片

小旋风百度SEO批量PING推送工具_小旋风ping工具-程序员宅基地

文章浏览阅读918次。介绍独创模拟用户推送(无需切换IP),吸引蜘蛛快速收录大杀器!电脑需安装 .NET Framework 4.0 以上,自行检查!1、批量导入网址(一行一条url地址)2、万级数量URL秒级导入3、多线程发包,日推送量百万以上4、独创模拟真实用户发包推送,无需切换IP百度PING推送不用token 和 Cookie 一天无限推送链接提交给百度收录,这款工具非常好用,亲测一天收录增加20000多!这款工具原版绿色需要2500 这款无需绿色免费使用。现在便宜出售。一天可推送几百万条连接给bai_小旋风ping工具

scala函数式编程_想要开始进行函数式编程,请进入scala-程序员宅基地

文章浏览阅读283次。scala函数式编程 意见 (Opinion)If you haven’t used Scala yet, you’re not the only one: Not even four percent of all programmers were using the language as of last year, according to 如果您还没有使用Scala,那么您不是唯一的一个...

Android开发笔记之自定义控件(物流时间轴的实现)_android 类似快递时间轴控件-程序员宅基地

文章浏览阅读3.9k次。最近修改项目遇到查看物流这个需求,经过一个下午的时间的终于搞定,趁着这个时间点,赶快把这个功能抽取出来,方便大家以后开发的需要,帮助到更多的人 先看效果图,如下 看完之后,分析可知道,主要是两部分,一个头部和一个body. 那我们最主要的工作就是body内容的实现,头部的实现简单,这里就不再详细的说明 这里我给大家提供一个github上的开源项目,不过这个实现起来,绘制的效果比较慢,不过_android 类似快递时间轴控件

element-ui+vue给登录界面创建一个走马灯幻灯片切换_elementui走马灯图片-程序员宅基地

文章浏览阅读3.3k次,点赞8次,收藏24次。效果想要达到的效果如下图,顶部横幅有6张图片可以自动切换:实现步骤先去element-ui官网学习这个跑马灯的模板代码:<template> <el-carousel :interval="4000" type="card" height="200px"> <el-carousel-item v-for="item in 6" :key="item"> <h3 class="medium">{{ item }}</h3_elementui走马灯图片

随便推点

hrbust 1739 Sort Problem 模拟_zcmu1739-程序员宅基地

文章浏览阅读347次。Sort ProblemTime Limit: 1000 MSMemory Limit: 65535 KTotal Submit: 343(88 users)Total Accepted: 182(86 users)Rating: Special Judge: YesDescription_zcmu1739

【数据结构】数组与广义表-螺旋矩阵的实现(图解、c++、java)_数据结构螺旋方阵-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏4次。URLeisure的螺旋矩阵的实现“完美”复习资料。_数据结构螺旋方阵

UI自动化中,常见JS处理_ui自动化如何向只读属性输入数据-程序员宅基地

文章浏览阅读490次。UI自动化_JS处理1)下拉滚动条from selenium import webdriverimport time driver = webdriver.Chrome()driver.maximize_window()driver.get('https://www.baidu.com/')driver.find_element_by_id('kw').send_keys('自动化测试')driver.find_element_by_id('su').click()time.sleep_ui自动化如何向只读属性输入数据

安装bochs并配置linux0.11-程序员宅基地

文章浏览阅读189次。为什么80%的码农都做不了架构师?>>> ..._bochs rootimage-0.11

BUUCTF:【x_nuca_2018_offbyone2】(off by null)-程序员宅基地

文章浏览阅读1.2k次。在buu里挑了一道heap的题,是一道off by null 的题,比较容易,经典一些例行检查:_x_nuca_2018_offbyone2

推荐文章

热门文章

相关标签