写在前边:直接引入对新手来说太不友好了,弄了大半天头都大了。
(最后无意间看到pbkiller,突然觉得这一晚上都白瞎了。一位大神给的pbkiller使用教程,链接Creator插件-pbkiller安装使用_腾讯视频);
还是记录一下今天使用protobuff过程吧:
1、下载node.js
官网链接地址:https://nodejs.org/en/download/
默认安装
2、然后的操作就根据那位大神发得文章一直操作下去
文章链接地址:https://www.jianshu.com/p/c4b8a8e3077f
直到文章中的这一步,
我这边使用protobuf.protoFromFile('xxx.proto',builder);这一步怎么都读不到文件,老是报错说找不到 xxx.proto(多半是路径问题,但到最后还是没弄明白究竟该怎么改....)。咋办啊?这时无意间发现 “cc.loader.loadRes('Player', function(err,res){});”可以读到文件,然后就想了个笨办法,具体见3。
3、思路:先用cc.loader加载Player.proto文件,然后再使用protobufferjs:
//gameCtrl.js
cc.Class({
extends: cc.Component,
properties: {
prodefine:null,
},
onLoad:function(){
this.loadConfig();
},
//用cc.loader读resources下的Player.proto文件
loadConfig:function(){
let self =this;
cc.loader.loadRes('Player', function(err,res){
self.prodefine =res;
self.loadPro();
});
},
loadPro:function(){
let protobuf = require("protobufjs");
//使用loadProto 代替protoFromFile
let builder = protobuf.loadProto(this.prodefine);
var ccc = builder.build("ccc");
var msgObj = new ccc["Player"]();
msgObj.id = 10;
console.log(msgObj);
cc.log("输出msgObj:id",msgObj.id," enterTime:",msgObj.enterTime," name:",msgObj.name);
},
});
项目结构(gameCtrl随便挂个节点,只要能调用到onLoad函数就行)
其中Player.proto的定义如下:
package ccc;
message Player {
required uint32 id = 1;
optional string name = 2;
optional uint64 enterTime = 3;
}
4、结果
web调试结果:
jsb调试结果 :
方法笨了点,但无论如何,总算可以用了。
5、写在最后:看到pbkiller的那一刻,我肠子都悔青了。。。
对于我们这些新手来说,教程资源这些事真的难找,希望各路大神能多多发使用经验及教程,让我们这些小白少走点弯路,谢谢了。