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類型的對象。