Protobuf在微信小遊戲開發中的使用技巧 原 薦

微信小遊戲發佈後,許多 HTML5 遊戲開發者希望把現有的 HTML5 遊戲遷移到微信小遊戲中,但由於一些技術上的問題導致進程卡殼。通過梳理Egret社區、白鷺小遊戲開發技術討論羣等途徑的反饋後發現,有不少開發者遇到的難題在於「如何在微信小遊戲中使用Protobuf 」。

白鷺引擎架構師王澤在近期發佈了一個開源項目protobuf-egret,提供了一個可以適配微信小遊戲的Protobuf 類庫以及對應的代碼生成工具,並且這個工具不僅限於白鷺引擎,即使是使用其他 HTML5 遊戲引擎的開發者也可以使用。

項目地址:

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 社區、白鷺小遊戲研發技術討論微信羣參與討論,官方技術人員將爲你一一解答。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章