在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. 编程算法 - 二部图确定 代码(C)

    二部图确定 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定一个具有n个顶点的图. 要给图上每一个顶点染色, 而且要使相邻的顶点颜色不同.  ...

  2. .Net IOC 之Unity

    .Net IOC 之Unity 在码农的世界里,为了应付时常变更的客户需求,增加的架构的客扩展性,减少工作量.IOC诞生了,它是一种可以实现依赖注入和控制对象生命周期的容器.最为一个有节操.有追求的码 ...

  3. UC编程:通过fwrite()和write()比较标准库函数和系统调用的速度

    fwrte是C标准库中提供的函数,是对write函数的扩展与封装,write则是Unix系统提供的函数.按照常理来讲,系统调用肯定比使用库快的多,但是事实正好相反 Why?原因就在于缓冲的问题,fwi ...

  4. 折腾源WRT的AC路无线路由-2

    在创纪录的开箱图,开箱后,我觉得大尺寸,因此,获得一些各种尺寸,喜欢网上购物的参考.也许这,安装后,它占用的大小:基本长度=28.5cm.深度=19.5cm,高=19.5,因为制造商推荐的约两个天线是 ...

  5. Repository在DDD中的应用

    Repository在DDD中的应用2014-10-09 08:55 by Jesse Liu, 98 阅读, 0 评论, 收藏, 编辑 概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值 ...

  6. Scala很难!

    Scala很难! 本文是从 Yes, Virginia, Scala is hard 这篇文章翻译而来. 首先要说的是,我是一个Scala粉丝,我作为一个Scala语言的倡导者差不多有5年历史了.我写 ...

  7. [代码收藏]设为首页和加入收藏的JavaScript代码(兼容多浏览器)

    其实不少非IE内核浏览器都仍不支持通过代码将网页设为主页和加入收藏的功能,因此说是兼容,其实只是一个try,catch后的提醒而已. 加入收藏: /* * author : 2010-12-27 11 ...

  8. 【转载】Android中ListView下拉刷新的实现

    在网上看到一个下拉刷新的例子,很的很棒,转载和更多的人分享学习 原文:http://blog.csdn.net/loongggdroid/article/details/9385535 ListVie ...

  9. 入门 ASP.NET Web API 2 (C#)

    入门 ASP.NET Web API 2 (C#) HTTP 不只是为了生成 web 页面.它也是一个强大的建设公开服务和数据 Api的平台. HTTP 的特性:简单. 灵活和无处不在.你能想到的几乎 ...

  10. ASP.NET SignalR 2.0入门指南

    ASP.NET SignalR 2.0入门指南 介绍SignalR ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程.实时Web功 ...