在egret中使用protobuf
在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中,下一篇博客会介绍。
最新文章
- 从零开始编写自己的C#框架(25)——网站部署
- 【练习】使用服务下载图片并保存到sdcard
- HGE引擎之hgeSprite
- The Ninth Hunan Collegiate Programming Contest (2013) Problem F
- LLVM language 参考手册(译)(6)
- UML类图详细介绍
- C++ primer学习方法
- WPF笔记(2.6 ViewBox)——Layout
- cocos2d-X-3.X 场景与层
- ios -Unity3D的EasyAR集成到已经有项目中。
- APP自动化框架LazyAndroid使用手册(3)--核心API介绍
- .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger)
- Echarts折线图案例
- laravel 控制器类DB类操作
- #include 相关问题
- nodejs 支付宝app支付
- Delphi Excel导入 的通用程序转载
- Ubuntu 16.04安装idea
- vscode vue代码提示错误
- Cannot assign “A1”: “B1” must be a “C1” instance.
热门文章
- Java 之复合赋值运算符
- [译]Java 设计模式之单例
- Extjs 组件继承 模板说明(同GridPanel案件)
- Plugin For KanColleViewer – Provissy Tools V1.0
- Inno Setup connection to the database and create
- HDInsight-Hadoop现实(两)传感器数据分析
- 利用Delphi监视注册表的变化
- LigerUI一个前台框架增、删、改asp.net代码
- J2EE开发HelloWorld
- psql: FATAL: role “postgres” does not exist 解决方案