在egret中使用protobuf


在H5游戲領域,對於服務端與客戶端的通信協議有一個選擇,那就是使用protobuf.js。對於那些直接使用JavaScript開發的引擎而言,protobuf的導入非常簡單,然而egret采用的是typescript語言開發的,直接導入protobuf,在使用中是一定會報錯的,也就是要解決ts調用js的問題。

typescript為我們提供這樣的一個方案,即是為JavaScript編寫一個聲明文件*.d.ts,具體的書寫方式可以參考這里

我這里自己編寫了一份protobuf.d.ts供大家參考,希望對大家有所幫助,節省一些時間。關於如何導入第三方庫可以參考我的另一篇文章。下面給出使用方法。

這里給出一個proto文件示例代碼

package login;  
message Login {
    required string userName = 1;
    required string password = 2;
    optional int32 sex = 3;
    required bool isFirstLogin = 4;
    repeated string param = 5;
}  

相應的使用protobuf的測試代碼,注意我這里使用了白鷺引擎載入proto文件的文本內容,如果你是用的typescript而不依賴於引擎的,只需要編寫載入proto文件文本的代碼即可。

let str:string = RES.getRes("login_proto");
let builder:dcodeIO.ProtoBuf.Builder = dcodeIO.ProtoBuf.newBuilder();
dcodeIO.ProtoBuf.loadProto(str, builder);
let protoroot = builder.build();
let msgCls = protoroot.login["Login"];
let msgObj = new msgCls({userName:"test",password:"123456", sex:1, isFirstLogin:false, param:["test", "array", "param"]});
let msg = msgObj.encode();
let msgDe = msgCls.decode(msg);
console.log(msgDe);  

2017.5.10

最近有讀者發現在protobuf官方下載的下來的使用我的聲明會報錯。然后我去查看了一下,然后發現protobuf已經重新實現過了,因此相應的聲明也需要重寫。但是我發現官方改動使用了很多的新技能,以致於無法適應於egret,而且有typescript的實驗功能,比如裝飾等,egret的編譯器是自己重新實現過的,因此對於這些功能的支持尚需等待egret更新編譯器以支持typescript新特性(當然自己去寫聲明應該也可以跳過這些問題)。考慮到自己的工作比較忙,又不能因此耽誤大家的項目,因此,我將之前編譯好的protobuf上傳到百度網盤,需要的可以下載,另外由於現官方的接口已經有很大改動,因此API文檔也會相應上傳。
百度網盤
提取碼:tdew


修改 2017.9.22

時隔快半年了,才想起這個這里的內容還沒有更新。這小半年一直在忙於做游戲,以至於無心其他事情,如今,游戲也快上線了,我也能抽空寫寫東西了。
這小半年的變化可不小,protobuf的api整個都變了,egret引擎更新到了5.x,配置方式也發生了一些小小的變化,不過影響也不是很大,我們依然能夠將protobuf應用在egret中,下一篇博客會介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM