美文网首页微信小游戏
CocosCreator-微信小游戏中Protobuffjs的使

CocosCreator-微信小游戏中Protobuffjs的使

作者: 伏波Rinnsio1xy | 来源:发表于2018-01-03 11:18 被阅读168次

        在跑了微信小游戏的发布流程后,紧急着要处理的问题就是protobuffjs的使用,protobuff的使用呢其实大家都很熟悉了,唯一的痛点就是加载、加载、加载问题,不同平台读取文件的方式有所差异的。之前的的一篇已经对原生平台和web平台的加载和使用做了记录,还不了解的可以看下我的另一篇笔记(【CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)】)哦。接下来就是解决微信小游戏的proto加载问题了。

    一、加载方式

        1、单个proto加载

            如果我们在定义proto的时候把所有结构都定义到一个proto文件里面那么微信小游戏或者其他平台的话加载就很简单了用ccc的异步加载方式就可以了,单个proto不存在proto之间的引用问题,所以很简单的就加载了。用CCC的和cc.loader.loadRes 和protobuffjs的ProtoBuf.loadProto(proto, builder, fileName)可以了。

    其中buider就是用来build一个message的全局对象了(我定义的是全局对象)

      2、多个proto加载

            如果我们还是用以前的ProtoBuf.loadProtoFile(fullPath, builder)的方式的话,加载结果就是这样:WAGame.js:4 request:fail invalid url "res/raw-assets/resources/Proto/Guide.proto",很明显是路径问题,这里我没有进去深究为何路径不能读取的问题,反正:微信小游戏就是读取不了就是了,所以我们增加了微信小游戏的加载判断,这里需要用到平台的判断:

    cc.sys.platform === cc.sys.WECHAT_GAME

    加载还是用的是cc.loader.loadRes 和protobuffjs的ProtoBuf.loadProto(proto, builder, fileName)。

    修改protobuf.Util.fetch函数的:

    protobuf.Util.fetch = function myfetch(path, callbcak) { 

        //检查是否为原生环境 

        if (cc.sys.isNative) {   

          //原生环境直接使用jsb提供的文件操作函数加载proto内容   

          let str = jsb.fileUtils.getStringFromFile(path);   

          //如果是异步回调方式,使用callback参数返回数据   

          if (callbcak) {

              callbcak(str);       

              return null;

          }   

          //同步方式用返回值返回数据   

          return str;

        }

        if(cc.sys.platform === cc.sys.WECHAT_GAME){

            cc.log("微信小游戏直接跳过")

            return ""

        } else {

            //为web环境使用,protobufjs原来的处理函数 

            return fetch.call(this, path, callbcak); 

        }

    };

    相关文章

      网友评论

        本文标题:CocosCreator-微信小游戏中Protobuffjs的使

        本文链接:https://www.haomeiwen.com/subject/tvxhnxtx.html