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