使用cocos creator 1.6 没几天 遇到了 protobufjs 的坑。查了以下度娘发现 用 protobufjs 6.8.0 很方便。但是它跟 5.0 使用上 不同。得到了 “基于protobufjs6.8.0的插件,适用于creator1.6+” 作者 catfish 的指点以后 终于跑通了。给大家分享以下。
1: https://github.com/dcodeIO/protobuf.js 去这里下载 protobufjs6.8.0 然后在 dist 目录下 找到 protobuf.js 文件或者 protobuf.min.js 用插件添加方式 添加到 cocos creator 里 复制粘贴到 easter 文件里 然后在 cocos creator 弹出框里点击 是 就行了。
2: proto 文件放在 resources 文件夹下面。 我的是放在 resources 文件夹下的 proto 文件夹里 记得写正确路径就行。没有resources 文件夹 可以创建一个。
3: 以下是使用代码
onLoad: function () {
cc.game.addPersistRootNode(this.node);
this.init();
},
init : function () {
if (typeof protobuf === 'undefined')
{
throw(new Error("protobuf is undefined"));
}
//proto 文件路径
var protoPath ="resources/proto/chrismas.proto";
var self = this;
//加载protos 文件
protobuf.load(cc.url.raw(protoPath), function(err,data){
self.proto = data;
//以下是测试代码
//我在proto 文件里创建了 WxLogin 的 message
//创建消息
var testData1 = self.createProtoBuf("WxLogin",{code:'1',openid:'12345'});
//解析消息
var testData2 = self.parseProtoBuf("WxLogin",testData1);
cc.log("testData1= ",testData1);
cc.log("testData2= ",testData2);
});
},
createProtoBuf:function(msg,data){
var msg_class = this.proto.lookupType(msg);
var message = msg_class.create(data);
var body = msg_class.encode(message).finish();
return body;
},
parseProtoBuf:function(msg,data){
var msg_class = this.proto.lookupType(msg);
var body = msg_class.decode(data);
return body;
}