溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Egret之ProtoBuf安裝

發(fā)布時間:2020-06-18 13:51:29 來源:網(wǎng)絡 閱讀:4318 作者:Aonaufly 欄目:移動開發(fā)

安裝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 體驗"

Egret之ProtoBuf安裝

二:安裝Protobuf基礎庫

npm install protobufjs@6.8.4 -g

npm install @egret/protobuf -g

① : protobufjs@6.8.4

Egret之ProtoBuf安裝

② : @egret/protobuf

Egret之ProtoBuf安裝

三 : 將ProtoBuf相關(guān)庫注入到Egret項目之中

①,新建一個Egret(Eui)項目  (ProtobufNpmDemo)  (各種方法可以建立 , 這里不講了)

②,我們到項目目錄里面(important)

Egret之ProtoBuf安裝

③,在此資源管理器打開資源管理器

Egret之ProtoBuf安裝

④,使用命令 : pb-egret add 注入ProtoBuf

Egret之ProtoBuf安裝

我們再看看我們的項目 , 多了個protobuf文件夾

Egret之ProtoBuf安裝

四 : 生成protobuf-bundles(實際是將proto文件JS化,有利于OOP思想)

ps : 可以看到目前的bundles文件夾中無任何的資源

①,新建test.proto資源(在protobuf\protofile中)

②,使用pb-egret generate命令

Egret之ProtoBuf安裝

我們再看看bundles , 已經(jīng)有文件了

Egret之ProtoBuf安裝

這些都是根據(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安裝


補充 --- 

① , 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


向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI