在H5游戏领域,对于服务端与客户端的通信协议有一个选择,那就是使用protobuf.js。对于那些直接使用JavaScript开发的引擎而言,protobuf的导入非常简单,然而egret采用的是typescript语言开发的,直接导入protobuf,在使用中是一定会报错的,也就是要解决ts调用js的问题。

typescript为我们提供这样的一个方案,即是为JavaScript编写一个声明文件*.d.ts,具体的书写方式可以参考这里

我这里自己编写了一份protobuf.d.ts供大家参考,希望对大家有所帮助,节省一些时间。关于如何导入第三方库可以参考我的另一篇文章。下面给出使用方法。

这里给出一个proto文件示例代码

package login;
message Login {
required string userName = 1;
required string password = 2;
optional int32 sex = 3;
required bool isFirstLogin = 4;
repeated string param = 5;
}

相应的使用protobuf的测试代码,注意我这里使用了白鹭引擎载入proto文件的文本内容,如果你是用的typescript而不依赖于引擎的,只需要编写载入proto文件文本的代码即可。

let str:string = RES.getRes("login_proto");
let builder:dcodeIO.ProtoBuf.Builder = dcodeIO.ProtoBuf.newBuilder();
dcodeIO.ProtoBuf.loadProto(str, builder);
let protoroot = builder.build();
let msgCls = protoroot.login["Login"];
let msgObj = new msgCls({userName:"test",password:"123456", sex:1, isFirstLogin:false, param:["test", "array", "param"]});
let msg = msgObj.encode();
let msgDe = msgCls.decode(msg);
console.log(msgDe);

2017.5.10

最近有读者发现在protobuf官方下载的下来的使用我的声明会报错。然后我去查看了一下,然后发现protobuf已经重新实现过了,因此相应的声明也需要重写。但是我发现官方改动使用了很多的新技能,以致于无法适应于egret,而且有typescript的实验功能,比如装饰等,egret的编译器是自己重新实现过的,因此对于这些功能的支持尚需等待egret更新编译器以支持typescript新特性(当然自己去写声明应该也可以跳过这些问题)。考虑到自己的工作比较忙,又不能因此耽误大家的项目,因此,我将之前编译好的protobuf上传到百度网盘,需要的可以下载,另外由于现官方的接口已经有很大改动,因此API文档也会相应上传。

百度网盘

提取码:tdew


修改 2017.9.22

时隔快半年了,才想起这个这里的内容还没有更新。这小半年一直在忙于做游戏,以至于无心其他事情,如今,游戏也快上线了,我也能抽空写写东西了。

这小半年的变化可不小,protobuf的api整个都变了,egret引擎更新到了5.x,配置方式也发生了一些小小的变化,不过影响也不是很大,我们依然能够将protobuf应用在egret中,下一篇博客会介绍。

在egret中使用protobuf的更多相关文章

  1. 在Wcf中应用ProtoBuf替代默认的序列化器

    Google的ProtoBuf序列化器性能的牛逼已经有目共睹了,可以把它应用到Socket通讯,队列,Wcf中,身为dotnet程序员一边期待着不久后Grpc对dotnet core的支持更期待着Wc ...

  2. webapi 中使用 protobuf

    相比json来说,好处是速度更快,带宽占用更小.其效果大致等于json+Gzip. 在webapi中使用protobuf的方法为: 引用nuget包 Install-Package protobuf- ...

  3. 在网络通讯中应用Protobuf

    在网络通讯中应用Protobuf Protobuf的设计非常适用于在网络通讯中的数据载体,它序列化出来的数据量少再加上以K-V的方式来存储数据,对消息的版本兼容性非常强:还有一个比较大的优点就是有着很 ...

  4. 怎样在Spark、Flink应用中使用Protobuf 3的包

    如果在在Spark.Flink应用中使用Protobuf 3的包,因为Spark默认使用的是2.5版本的包,提交任务时,可能会报如下异常: com.google.protobuf.CodedInput ...

  5. Egret中使用P2物理引擎

    游戏中的对象按照物理规律移动,体现重力.引力.反作用力.加速度等物体特性,实现自由落体.摇摆运动.抛物线运动,以及物理碰撞现象的模拟.用于模拟物理碰撞.物理运动的引擎称为物理引擎. 来自瑞典斯德哥尔摩 ...

  6. 在lua环境中使用protobuf

    最近在cocos2dx的项目中,需要在LUA脚本层使用protobuf协议.官方已经推出了很多种语言的版本.但唯独LUA版本不全.于是开始研究protobuf在LUA下的实现,将完整的过程记录了下来, ...

  7. DragonBones龙骨发布后在Egret中的位置

    DragonBones发布后的动画,加载到Egret中场景中,原点的位置在哪呢? DragonBones中的图片位置 导出 加载到Egret中.可见DragonBones中的图片位置原点左下方(0,0 ...

  8. 【咸鱼教程】Egret中可长按复制的文本(例如复制优惠码)

    一 实际效果二 实现原理三 源码下载 在egret中实现长按复制文本效果,一般用于复制优惠码什么的. 一 实际效果         二 实现原理 在egret的游戏元素都是绘制在canvas上的,我们 ...

  9. Egret中的三种单例写法

    1 普通的单例写法 as3中也是这么个写法. 缺点:每个单例类里都要写instance和getInstance. class Single{ private static instance:Singl ...

随机推荐

  1. 分布式消息系统kafka

    kafka:一个分布式消息系统 1.背景 最近因为工作需要,调研了追求高吞吐的轻量级消息系统Kafka,打算替换掉线上运行的ActiveMQ,主要是因为明年的预算日流量有十亿,而ActiveMQ的分布 ...

  2. YUV格式转换RGB(基于opencv)

    在编写代码将需要处理YUV格从每个视频帧中提取,然后将其保存为图片.有两种常见的方法在线,第一种是通过opencv自带cvCvtColor,可是这样的方法有bug.得到的图片会泛白.另外一种方法是公式 ...

  3. 快速构建Windows 8风格应用1-开发工具安装及模拟器使用

    原文:快速构建Windows 8风格应用1-开发工具安装及模拟器使用 本篇博文主要介绍的是开发Windows 8风格应用中常用的两个开发工具:Visual Studio 2012和Expression ...

  4. 使用sqlldr向Oracle导入大的文本(txt)文件

    我们有多种方法可以向Oracle数据库里导入文本文件,但如果导入的文本文件过大,例如5G,10G的文本文件,有些方法就不尽如意了,例如PLSQL Developer中的导入文本功能,如果文本文件过大, ...

  5. leetcode[87] Partition List

    题目:给定一个链表和一个数x,将链表中比x小的放在前面,其他的放在后头.例如: Given 1->4->3->2->5->2 and x = 3,return 1-> ...

  6. linux sendmail 邮件服务器架设(fedora 8)

    linux sendmail 邮件服务器架设(fedora 8) 2009-01-22 17:27 3316人阅读 评论(2) 收藏 举报 邮件服务器linuxprotocolscaching测试lo ...

  7. jquery扩展方法案例

    -----------------扩展方法: $.extend({ "max": function (a, b) { if (a > b) return a; }, &quo ...

  8. 关于如何惟一地标识一台Android设备的综合性讨论

    想必大家在开发Android项目的时候,多多少少会遇到“如何惟一地标识一台Android设备”等类似的问题.不只是以前,即使是现在乃至可以预见的将来,这个问题都将一直存在. 如果大家使用搜索工具搜索的 ...

  9. 【值得收藏】绘图工具Origin的学习资料汇编【可免费下载】

    Origin使用教程 Origin为OriginLab公司出品的较流行的专业函数绘图软件,是公认的简单易学.操作灵活.功能强大的软件,既可以满足一般用户的制图需要,也可以满足高级用户数据分析.函数拟合 ...

  10. Jquery Validate 表单验证的多种方式

    ASP.NET MVC Jquery Validate 表单验证的多种方式 在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体 ...