技术标签: 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
//消息包 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; // (可选的)
}
使用工具生成lua文件:
因为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")
这里就是protobuf的使用
实际使用的时候有个地方,因为如果走http,那base里面的_type 可能就没有用了,因为可以根据协议去使用不同的结构体来解析,
当然看个人喜好你也可以继续使用,_ecode 字段是错误码使用,在收到base以后可以直接收到错误码信息,做相应处理,就不需要解析子结构了.
哦,有个东西要说下, 就是enum, 我之前是会根据协议名定义对应的枚举,但是之前的protolua那块 枚举有问题,不知道库为什么没有生成出来枚举的lua代码, 所以现在的版本就不准备用了
可以留言进行沟通和交流
文章浏览阅读357次。前置要求MongoDb需要使用Shard方式部署 需要安装好 mongod、mongos、replica set使用GridFs存储文件GridFs存储文件的方式GridFs使用两个集合存储文件:files、chunks。如果不做指定,默认会使用前缀【fs.】files其中files是文件元数据,存储的是文件的一些信息。不建议分片,存储的数据就是一个简单的doc,数据量较小,如果需要使用分片,建议用_id分片。{ "_id" : 文件ObjectId, 【默认索引字段】_mongodb对gridfs进行分片
文章浏览阅读918次。介绍独创模拟用户推送(无需切换IP),吸引蜘蛛快速收录大杀器!电脑需安装 .NET Framework 4.0 以上,自行检查!1、批量导入网址(一行一条url地址)2、万级数量URL秒级导入3、多线程发包,日推送量百万以上4、独创模拟真实用户发包推送,无需切换IP百度PING推送不用token 和 Cookie 一天无限推送链接提交给百度收录,这款工具非常好用,亲测一天收录增加20000多!这款工具原版绿色需要2500 这款无需绿色免费使用。现在便宜出售。一天可推送几百万条连接给bai_小旋风ping工具
文章浏览阅读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,那么您不是唯一的一个...
文章浏览阅读3.9k次。最近修改项目遇到查看物流这个需求,经过一个下午的时间的终于搞定,趁着这个时间点,赶快把这个功能抽取出来,方便大家以后开发的需要,帮助到更多的人 先看效果图,如下 看完之后,分析可知道,主要是两部分,一个头部和一个body. 那我们最主要的工作就是body内容的实现,头部的实现简单,这里就不再详细的说明 这里我给大家提供一个github上的开源项目,不过这个实现起来,绘制的效果比较慢,不过_android 类似快递时间轴控件
文章浏览阅读143次。物联网
文章浏览阅读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走马灯图片
文章浏览阅读347次。Sort ProblemTime Limit: 1000 MSMemory Limit: 65535 KTotal Submit: 343(88 users)Total Accepted: 182(86 users)Rating: Special Judge: YesDescription_zcmu1739
文章浏览阅读1.1k次,点赞2次,收藏4次。URLeisure的螺旋矩阵的实现“完美”复习资料。_数据结构螺旋方阵
文章浏览阅读285次。物联网
文章浏览阅读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自动化如何向只读属性输入数据
文章浏览阅读189次。为什么80%的码农都做不了架构师?>>> ..._bochs rootimage-0.11
文章浏览阅读1.2k次。在buu里挑了一道heap的题,是一道off by null 的题,比较容易,经典一些例行检查:_x_nuca_2018_offbyone2