微信小遊戲發佈後,許多 HTML5 遊戲開發者但願把現有的 HTML5 遊戲遷移到微信小遊戲中,但因爲一些技術上的問題致使進程卡殼。經過梳理Egret社區、白鷺小遊戲開發技術討論羣等途徑的反饋後發現,有很多開發者遇到的難題在於「如何在微信小遊戲中使用Protobuf 」。git
白鷺引擎架構師王澤在近期發佈了一個開源項目protobuf-egret,提供了一個能夠適配微信小遊戲的Protobuf 類庫以及對應的代碼生成工具,而且這個工具不只限於白鷺引擎,即便是使用其餘 HTML5 遊戲引擎的開發者也可使用。github
項目地址:後端
https://github.com/WanderWang/protobuf-egret/微信
開源項目 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 社區、白鷺小遊戲研發技術討論微信羣參與討論,官方技術人員將爲你一一解答。