您好,登錄后才能下訂單哦!
安裝ProtoBuf , 網(wǎng)絡上的方法五花八門 . 但是很多都不是那么正規(guī) . 自己通過NPM官網(wǎng) (https://www.npmjs.com/package/@egret/protobuf) , 總結(jié)了一套方法.
一 : 先要安裝node.js 和 npm . 沒有安裝的 , 可以度娘,亦可以參考 : https://blog.51cto.com/aonaufly/1954296 Blog:"TypeScript 體驗"
二:安裝Protobuf基礎庫
npm install protobufjs@6.8.4 -g
npm install @egret/protobuf -g
① : protobufjs@6.8.4
② : @egret/protobuf
三 : 將ProtoBuf相關(guān)庫注入到Egret項目之中
①,新建一個Egret(Eui)項目 (ProtobufNpmDemo) (各種方法可以建立 , 這里不講了)
②,我們到項目目錄里面(important)
③,在此資源管理器打開資源管理器
④,使用命令 : pb-egret add 注入ProtoBuf
我們再看看我們的項目 , 多了個protobuf文件夾
四 : 生成protobuf-bundles(實際是將proto文件JS化,有利于OOP思想)
ps : 可以看到目前的bundles文件夾中無任何的資源
①,新建test.proto資源(在protobuf\protofile中)
②,使用pb-egret generate命令
我們再看看bundles , 已經(jīng)有文件了
這些都是根據(jù)test.proto生成的類
test.proto:
package Test; message Login{ required string userName = 1; required string password = 2; optional int32 sex = 3; required bool isFirstLogin = 4; repeated string param = 5; }
生成的protobuf-bundles.d.ts(其一)如下:
type Long = protobuf.Long; /** Namespace Test. */ declare namespace Test { /** Properties of a Login. */ interface ILogin { /** Login userName */ userName: string; /** Login password */ password: string; /** Login sex */ sex?: (number|null); /** Login isFirstLogin */ isFirstLogin: boolean; /** Login param */ param?: (string[]|null); } /** Represents a Login. */ class Login implements ILogin { /** * Constructs a new Login. * @param [properties] Properties to set */ constructor(properties?: Test.ILogin); /** Login userName. */ public userName: string; /** Login password. */ public password: string; /** Login sex. */ public sex: number; /** Login isFirstLogin. */ public isFirstLogin: boolean; /** Login param. */ public param: string[]; /** * Creates a new Login instance using the specified properties. * @param [properties] Properties to set * @returns Login instance */ public static create(properties?: Test.ILogin): Test.Login; /** * Encodes the specified Login message. Does not implicitly {@link Test.Login.verify|verify} messages. * @param message Login message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ public static encode(message: Test.ILogin, writer?: protobuf.Writer): protobuf.Writer; /** * Encodes the specified Login message, length delimited. Does not implicitly {@link Test.Login.verify|verify} messages. * @param message Login message or plain object to encode * @param [writer] Writer to encode to * @returns Writer */ public static encodeDelimited(message: Test.ILogin, writer?: protobuf.Writer): protobuf.Writer; /** * Decodes a Login message from the specified reader or buffer. * @param reader Reader or buffer to decode from * @param [length] Message length if known beforehand * @returns Login * @throws {Error} If the payload is not a reader or valid buffer * @throws {protobuf.util.ProtocolError} If required fields are missing */ public static decode(reader: (protobuf.Reader|Uint8Array), length?: number): Test.Login; /** * Decodes a Login message from the specified reader or buffer, length delimited. * @param reader Reader or buffer to decode from * @returns Login * @throws {Error} If the payload is not a reader or valid buffer * @throws {protobuf.util.ProtocolError} If required fields are missing */ public static decodeDelimited(reader: (protobuf.Reader|Uint8Array)): Test.Login; /** * Verifies a Login message. * @param message Plain object to verify * @returns `null` if valid, otherwise the reason why it is not */ public static verify(message: { [k: string]: any }): (string|null); } }
五:運用
①,代碼:
/** * 創(chuàng)建場景界面 * Create scene interface */ protected createGameScene(): void { let $login : Test.ILogin = new Test.Login({userName:"Aoanufly",password:"123456", sex:1, isFirstLogin:false, param:["test", "array", "param"]}); console.log(`loginName : ${$login.userName}`); }
②,結(jié)果
補充 ---
① , Egret官方ProtoBuf:
https://www.cnblogs.com/gamedaybyday/p/9219946.html
②:利用命令將template.proto生成JS
pbjs -t static-module -w commonjs -o template.js template.proto
pbts -o template.d.ts template.js
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。