creator 引入 protobuf

写在前边:直接引入对新手来说太不友好了,弄了大半天头都大了。

(最后无意间看到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的那一刻,我肠子都悔青了。。。
      对于我们这些新手来说,教程资源这些事真的难找,希望各路大神能多多发使用经验及教程,让我们这些小白少走点弯路,谢谢了。

猜你喜欢

转载自blog.csdn.net/anywn_future/article/details/81416223