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 社群、白鷺小遊戲研發技術討論微信群參與討論,官方技術人員將為你一一解答。
原文釋出時間為:2018年01月24日
原文作者:白鷺科技
本文來源:開源中國 如需轉載請聯絡原作者
相關文章
- Vue 使用中的小技巧Vue
- 微信小程式小技巧微信小程式
- 微信小程式video在元件中的使用---暫停影片微信小程式IDE元件
- 在 Golang 中使用 ProtobufGolang
- netty系列之:protobuf在UDP協議中的使用NettyUDP協議
- 在微信小程式中使用redux微信小程式Redux
- 微信小遊戲開發小記遊戲開發
- 在java程式中使用protobufJava
- 談下微信小程式的抓取技巧微信小程式
- Mysql中的小技巧MySql
- 【js】中的小技巧JS
- 微信小程式之提高應用速度小技巧微信小程式
- Redux在React中的使用小結ReduxReact
- 在 ROS 中使用 Protobuf 替代 ros msgROS
- 在微信小程式裡使用 watch 和 computed微信小程式
- TypeScript在React高階元件中的使用技巧TypeScriptReact元件
- 關於逗號( , )在JS中的使用技巧JS
- OI 中的小技巧(工具)
- mac中osx lion 預覽使用小技巧Mac
- 遊戲開發-協議設計-protobuf遊戲開發協議
- 在 Linux中find命令使用技巧Linux
- nginx小技巧-動態域名(微信,小程式80埠)Nginx
- 微信小程式的底部使用微信小程式
- 乾貨技巧,微信小程式推廣運技巧祕籍微信小程式
- 在網路通訊中應用Protobuf
- Windows使用小技巧Windows
- photoshop使用小技巧
- 關於使用iview中Table元件的一點小技巧View元件
- Pentaho BI server 中 CCC table Component 的使用小技巧Server
- Flex中的小技巧備忘Flex
- 小技巧:微信聊天背景怎麼設定?
- 在微信小程式中打造 MQTT 連線測試工具微信小程式MQQT
- 微信小程式Animation動畫的使用微信小程式動畫
- 『小程式開發』關於微信小程式內建元件swiper,circular(銜接)使用小技巧(實戰)微信小程式元件
- 日常生活小技巧 -- vim 中 ctags 的安裝和使用
- Postman 使用小技巧/指南Postman
- VS Code 使用小技巧
- Eclipse使用小技巧Eclipse