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类型的对象。

 

 

 

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