微信小游戏发布后,许多 HTML5 游戏开发者希望把现有的 HTML5 游戏迁移到微信小游戏中,但由于一些技术上的问题导致进程卡壳。通过梳理Egret社区、白鹭小游戏开发技术讨论群等途径的反馈后发现,有不少开发者遇到的难题在于「如何在微信小游戏中使用Protobuf 」。

白鹭引擎架构师王泽在近期发布了一个开源项目protobuf-egret,提供了一个可以适配微信小游戏的Protobuf 类库以及对应的代码生成工具,并且这个工具不仅限于白鹭引擎,即使是使用其他 HTML5 游戏引擎的开发者也可以使用。

项目地址:

开源项目 protobuf-egret主要包含了特性、原理、如何安装与使用、如何运行DEMO以及部分已知问题等内容,希望通过本篇内容能够更好的帮助大家开展微信小游戏工作。

特性

1.提供 protobuf.js 基础运行时库

2.提供命令行脚本,将 protofile 生成 JavaScript 代码

3.生成正确的 .d.ts 代码,以方便 TypeScript 项目使用

4.一键配置白鹭引擎的配置文件,无需开发者手动修改配置即可在项目中直接集成

5.本项目虽然名为 protobuf-egret,但是理论上支持所有 HTML5 游戏引擎。欢迎使用 PIXI.js , Cocos2d-js , LayaAir 等其他引擎的开发者使用本库。

原理

Protobuf 是由 Google 设计的序列化数据通信协议。它的基本原理是,通过一个 proto 文件,生成对应平台的代码,并在这部分代码中包含了将对象进行二进制序列化以及对应反序列化的逻辑,研发的前后端如果统一使用同一份Protobuf协议定义接口,就可以统一接口,提升开发效率,并通过Protobuf提供的高效率压缩机制节省通讯流量开销。

protobufjs 是 Protobuf 在 JavaScript 中的实现,它包含了一个用于生成代码的命令行工具以及一个运行时库。在一个标准 Web 应用或者 NodeJS 应用中,使用 protobufjs 就已经可以解决绝大部分问题。但是在白鹭引擎以及微信小游戏中,存在着两个问题,使得 protobufjs 的使用存在一些困难:

1.protobufjs 提供了多种使用方式,但是由于微信小游戏禁止 eval , new Function 等动态代码形式,所以无法使用 protobuf.load('awesome.proto') 这样的方式,必须使用代码生成机制。

2.虽然protobufjs 自身存在着 pbts 命令可以生成 .d.ts 文件,但是在全局模式而非 ES6 module 的情况下存在一些错误。

本项目致力于解决这两个问题,封装了 protobufjs 库及命令行,提供了更简洁的调用方式:

1.在运行时库上使用 protobufjs 6.8.4 的运行时库。由于微信小游戏禁止 eval , new Function 等动态代码形式,所以本项目只提供了生成代码的形式,不支持通过 protobuf.load('awesome.proto') 的方式。

2.修改了生成的 JavaScript 与 .d.ts 文件,以保证可以顺利的在白鹭引擎及微信小游戏上运行。

3.提供了两个命令 pb-egret add 与 pb-egret generate用于搭建Protobuf 环境和生成代码。

如何安装与使用

如何运行 Demo

下载源代码,使用 egret run egret-project即可直接运行Demo项目

已知问题

proto 文件中的每一个协议一定要从属于一个 package,否则.d.ts生成会出现错误导致 ts 文件无法正确的找到这些类。

目前,已经有多个产品均使用这个类库成功的将游戏发布到微信小游戏中,欢迎各位开发者使用。如您有关于微信小游戏的问题咨询或建议,请到Egret 社区、白鹭小游戏研发技术讨论微信群参与讨论,官方技术人员将为你一一解答。

原文发布时间为:2018年01月24日原文作者:白鹭科技

本文来源:开源中国 如需转载请联系原作者

protobuf 微信小程序_Protobuf在微信小游戏开发中的使用技巧相关推荐

  1. 小程序 | 认识CMS、创建云开发环境、创建并进入CMS内容管理系统

    之前使用云开发在使用上受到了很大的限制,一和别人交流说自己做了一个小程序是用"云开发"完成的,仿佛很NB的样子,但只有自己知道心里是虚的.没有底儿的.一开始使用云开发的功能,先是& ...

  2. 小程序技术始于微信?来看看移动端小程序技术的前世今生!

    本文由DCloud 公司创始人王安原创发布于CSDN,原题<小程序技术演进史>,即时通讯网收录时有改动,感谢原作者. 1.引言 微信的成功,并非特定于某个具体的功能,微信的成功实际上是一大 ...

  3. php小程序地图处理,微信小程序 地图map详解及简单实例

    微信小程序 地图map 微信小程序map 地图属性名类型默认值说明longitudeNumber中心经度 latitudeNumber中心纬度 scaleNumber1缩放级别 markersArra ...

  4. api 定位 微信小程序 精度_微信小程序开发知识点集锦

    一 小程序的生命周期 代码生命周期就是一个对象的生老病死,通常指程序从创建.开始.暂停.唤起.停止.卸载的过程.小程序的生命周期又可分为应用生命周期和页面的生命周期,先单独分析,在结合两者分析 应用生 ...

  5. 小程序接收json_微信推出QQ小程序,但只能接收消息无法回复!网友:鸡肋

    大家了解过俄罗斯套娃吗?就是由多个一样图案的空心木娃娃,一个套一个组成,最多可达十多个.以前,小鱼以为它只是个工艺品:谁知道,聊天工具也可以「套娃」.近日,有网友发现微信上出现了「腾讯QQ」小程序,打 ...

  6. 【微信小程序canvas】实现小程序手写板用户签名(附代码)

    [微信小程序canvas]实现小程序手写板用户签名(附代码) 工作中公司业务需要的微信小程序用户签字功能 先看效果图: wxml <view class="wrapper"& ...

  7. 微信门店小程序怎样创建 门店小程序创建方法简介

    微信门店小程序怎样创建 门店小程序创建方法简介 微信门店小程序是什么东西?门店小程序要怎样创建?还不清楚微信门店小程序详情的小伙伴们抓紧时间跟上小编一起来看一下吧!     门店小程序是什么? 微信发 ...

  8. 微信小程序点播插件_小程序云直播amp;云点播插件限时降价了!!!

    普惠音视频开发者 小程序·云直播&云点播插件降价啦! 买200TB流量包免1年插件授权费用 小程序直播插件流量费支持资源包抵扣 点播插件免收播放次数费用 限时降价 买赠活动时间:2020年10 ...

  9. 友盟分享小程序_iOS分享微信小程序

    最近项目中遇到了APP分享微信小程序,记录下来问题,希望能帮助到需要的人 项目中的分享集成的是第三方的友盟,我看了下微信官方的sdk和友盟的小程序分享差不多,于是,就先罗列下友盟的分享 1.首先在微信 ...

最新文章

  1. 如何用asp.net实现校验功能!
  2. POJ 3237 树链剖分学习(树链剖分小结)
  3. qt中设置控件不能使用
  4. idea复制maven项目,source root为原项目的解决方法
  5. 电脑亮度多少对眼睛好_激光治疗近视眼大概要多少费用,保护好眼睛要做到哪几点...
  6. Python学习之布尔和数字
  7. java udp 流量控制_基于UDP传输协议的实现分析之流量和拥塞控制
  8. 如何让html标签不转义
  9. powermock私有字段_使用PowerMock的EasyMock私有方法模拟
  10. Snipaste截屏软件使用
  11. 龙芯源码编译mysql_使用源码包在龙芯2F上安装mysql
  12. 玉米社:sem竞价推广如何选择投放时间、投放地域
  13. 【miscellaneous】视频浓缩摘要简介
  14. Docker 从入门到精通(0基础也能看懂的教程)
  15. 在Java中,每个try块后面都必须紧跟catch块吗?
  16. JS - 自由变量与作用域链
  17. 什么是图床,如何理解图床
  18. 吗咿呀嘿-用js来搞个简单的人脸识别
  19. xfs文件系统损坏修复
  20. 面试指导笔记——面试篇

热门文章

  1. 以后再也去不论坛灌水了
  2. IP欺骗种类有哪些?
  3. 【MySQL】<关系型数据库>Linux安装MySQL(无错完整)
  4. PADS2007下快速布局布线PCB_本人总结
  5. 【提问的智慧】-[How To Ask Questions The Smart Way]
  6. CSS filter 有哪些神奇用途
  7. android 副屏,安卓收银机双屏(副屏)异显,主副屏通讯
  8. Flex系列教程——flex的下载与安装
  9. MySQL性能(一)
  10. find 查找文件或文件夹命令find