1.creator(不用導入pb爲插件)和node.js使用npm包上的protobuf.min.js 2.命令號enum的獲取

https://github.com/protobufjs/protobuf.js/tree/master/dist

1)庫

2)xxx.proto

// awesome.proto
package awesomepackage;
syntax = "proto3";

enum Cmd{
    INVALID_CMD = 0;
    AwesomeMessage = 1;
}

message AwesomeMessage {
    string awesome_field = 1; // becomes awesomeField
}

3)node.js下的使用(不用導入爲插件)

var protobuf = require("./protobuf.min.js");

protobuf.load("awesome.proto", function(err, root) {

    // 獲取類型
    var AwesomeMessage = root.lookupType("AwesomeMessage");

    // 構造消息
    var payload = { awesomeField: "AwesomeString" };

    // json編碼
    console.log("字符串長度:",  JSON.stringify(payload).length);

    // pb編碼
    var message = AwesomeMessage.create(payload);
    var buffer = AwesomeMessage.encode(message).finish();
    console.log("pb後長度:", buffer.length);

    // 解碼
    var message = AwesomeMessage.decode(buffer);
    console.log(message);

    let Cmd = root.lookupEnum("Cmd").values;
    console.log(Cmd.AwesomeMessage);

});

/*
字符串長度: 32
pb後長度: 15
AwesomeMessage { awesomeField: 'AwesomeString' }
1
 */

4)creator中的使用

cc.loader.loadRes("awesome.proto", function (err, data) {
            if (err) {
                return;
            }

            // 讀到文本內容,解析爲pb腳本
            let pb = protobuf.parse(data);

            // 獲取類型
            var AwesomeMessage = pb.root.lookupType("AwesomeMessage");

            // 構造消息
            var payload = {awesomeField: "AwesomeString"};

            // json編碼
            console.log("字符串長度:", JSON.stringify(payload).length);

            // pb編碼
            var message = AwesomeMessage.create(payload);
            var buffer = AwesomeMessage.encode(message).finish();
            console.log("pb後長度:", buffer.length);

            // 解碼
            var message = AwesomeMessage.decode(buffer);
            console.log(message);

            // 通過枚舉輸出命令號
            let Cmd = pb.root.lookupEnum("Cmd").values;
            console.log(Cmd.AwesomeMessage);
});

總結:

node.js中的load方法爲加載本地的文本文件。

由於creator中有自己的資源加載方式,不能用node.js那樣去加載。因此文本文件加載出來爲txt後,要解析一下爲pb類型的對象。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章