Egret社区

在Egret中使用ProtoBuf

2015-3-26 11:00
2833078
本题已加入常见问题汇总 » 第三方库大全,更多第三方库大全相关的话题欢迎关注讨论


        ProtoBuf是google 的一种数据交换的格式,多用于进行网络传输,在游戏行业使用的还算挺多的,跟JSON格式的数据传输节省的就不是一点半点了,如果有同学不了解ProtoBuf是什么东西的,可以自行baidu下


        github是个好东西,你需要的东西直接去搜就可以了,我们这篇的教程就是使用的一个开源的js库,ProtoBuf.js,既然js的库有了,那么我们只需要将js封装成第三库的形式在Egret中使用就可以了

        下面是封装第三库的目录结构,其中"ByteBufferAB.min.js", "Long.min.js", "ProtoBuf.min.js", 这三个js文件ProtoBuf.js必须要使用的, "ProtoBuf.d.ts"是需要我们创建的


       1.png

        "ProtoBuf.d.ts"中的代码很简单,只需要提供一个函数,基本就够我们使用了,此函数的参数为.proto文件的文件内容


          3.png

         然后在protobuf.json中配置好作为第三方库的基础配置

          2.png

         现在protobuf的第三方库创建好了,下面就要将这个库引入到我们的项目当中,打开egretProperties.json文件,添加以下配置,path为protobuf库的存放路径

          4.png

         egret b -e 编译一下就可以在项目中使用了

         下面我们准备一个simple.proto文件,并使用RES模块的加载到游戏中

          5.png


          6.png

          下面就是simple.proto的使用方法

          7.png

          查看输出结构,可以看到序列化后的数据是ArrayBuffer

          8.png

         下面我们就要将ArrayBuffer与egret.ByteArray结合使用

          9.png

         在Egret中使用ProtoBuf的过程就写到这里了,希望对大家有所帮助,附件中是封装好的protobuf库

          protobuf.zip (23.71 KB, 下载次数: 539)
分享到 :
18 人收藏

78 个回复

倒序浏览
lacusclyne  登堂入室 | 2015-4-21 02:52:46
报告楼主,经过长久的神奇错误调试,貌似在protobuf.json文件中应该将Long.js放在ByteBufferAB.js前,因为后者初始化时候会需要调用前者,不然无法正确解析Long类型
Adair  初窥堂奥 | 2015-11-30 19:14:43
楼主 我照着你的做的  然后出这个错了--   Uncaught Error: Unexpected token at line 1: undefined  请问是怎么回事?
Once  斑竹 | 2015-3-26 11:08:29
好教程
cfcf  初窥堂奥 | 2015-3-27 09:48:34
顶起来!
shavy  登堂入室 | 2015-4-13 22:13:02
我现有游戏的java服务端用的是MsgPack序列化,之前也考虑过protoBuf,但是大概看了下,好像java端的protoBuf配置起来比较复杂?没仔细研究(主要是java也不是很熟),所以一直用MsgPack了,感觉不是大项目也够用
yicaoyimu  初窥堂奥 | 2015-4-14 20:15:03
MsgPack 没用过 有时间研究研究~~
yicaoyimu  初窥堂奥 | 2015-4-21 09:46:07
lacusclyne 发表于 2015-4-21 02:52
报告楼主,经过长久的神奇错误调试,貌似在protobuf.json文件中应该将Long.js放在ByteBufferAB.js前,因为 ...

多谢,Long类型我还真没测,就写了个简单demo跑了下
xieweiaaa  圆转纯熟 | 2015-4-30 09:51:21
不错 压缩了字符串?
s98710  初窥堂奥 | 2015-4-30 15:35:48
感谢楼主,希望最好能再详细点
dicklick  登堂入室 | 2015-5-4 12:00:59
本帖最后由 dicklick 于 2015-5-4 13:54 编辑

App.Socket.send方法是用websocket吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号

Powered by Discuz! X3.2 © 2001-2019 Comsenz Inc.

返回顶部