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

李一花發表於2018-07-23

微信小遊戲釋出後,許多 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 社群、白鷺小遊戲研發技術討論微信群參與討論,官方技術人員將為你一一解答。

原文釋出時間為:2018年01月24日
原文作者:白鷺科技

本文來源:開源中國 如需轉載請聯絡原作者


相關文章