CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)

    第一次在上写笔记,之前一直是用的微软的OneNote,其实OneNote是非常不错的,我仍然在使用中,但是有的技术坑点是需要一起分享的,所以我也尝试用写来写写。

    相信搜索到这篇文章的开发者们在CCC(CocosCreator,后面都用CCC简称表示)中用Protobuff已将踩过不少坑了,我也是。现在我们一点点的来把这些坑点给踩过去。我们将以,导入,定义proto,加载proto,编码和解码四个步骤让protobuffjs“跑起来”。

一、ProbobuffJS导入

    我没有用npm安装,所以这里不能给大家太多建议,我用的是DecodeIo的那个版本(非6.0以上),6.0以上的变化很大,所以没用那个。

链接:https://github.com/dcodeIO/protobuf.js

CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第1张图片

把protobuffjs下载后解压出这三个文件非插入的方式放到ccc项目里面就可以了。

二、Proto定义

    相信大家都会定义proto,这里不多过多说明,需要说明的是google现在的protobuff分v2和v3,在定义的时候如果要区分开需要加入:syntax = "proto2"或者syntax = "proto3"。也可以不用加这个语法,默认就是syntax = "proto2"。我的proto定义:

CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第2张图片


三、加载Proto文件

    将定义好的.proto文件放到资源目录“resources”下的某个目录(开发者自己定义),我定义的是"Proto"文件夹。

CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第3张图片

现在需要代码来加载这些文件, 加载某个目录下的所以文件(全平台都能用的函数):

       cc.loader._resources.getUuidArray(PROTO_DIR, null, files);

        PROTO_DIR :.proto文件所在的目录,更多参数查看官方的API即可

        files:扫描到的文件列表。

获取PROTO_DIR 目录下的所有文件并添加到数组files代码:


CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第4张图片

加载单个.proto代码实现:


CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第5张图片

代码中的cc.GameMsg.Builder是我全局定义的,目的是将所有.proto文件加载并导入到一个builder里面方便使用(这里设计到message的定义和工具编写,我会在后期的篇章写到)。加载的核心代码:

ProtoBuf.loadProtoFile(fullPath, builder);

上面的2个函数就是加载.proto的过程,但是没有完哦,我们看到的是逻辑应用部分,后面还有一个工作要做,就是重写Protobuff.js的函数(这里我踩了很久的坑,一言难尽,后来购买了pbkiller和参考了pbkiller的作者才搞定的)。接下的代码就是在不影响protobuff.js源码的基础上重写2个函数:protobuf.Util.fetch 和 protobuf.Builder.prototype['import'],其中还有一个内部函数由于是私有函数,所以之类要原封不动的拷贝出来,protobuf.Builder.prototype['import'] 调用了此函数 propagateSyntax,我把这部分的重写单独的放到了一个叫ProtobuffExtendHelper.js的脚本里面。

protobuf.Util.fetch的重写(pbkiller作者实现)

CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第6张图片

propagateSyntax原样拷贝过来就行了

CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第7张图片

protobuf.Builder.prototype['import'] 的重写(pbkiller作者实现):

其中注视掉了部分代码,我没有进行详细的了解pbkiller为何要屏蔽掉,这里不做深究了,我只截了注视掉的部分,其余部分原样拷贝就行了。


CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第8张图片

在加载proto前,require("ProtobuffExtendHelper")这个文件就可以了。

四、编码和解码proto

编码:

CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第9张图片

    databuffer就是编码后的数据了,直接就用websocket或者socket.io进行发送数据了。

    解码:


解码也很简单的"senddataBufferBuffer"是服务器发送过来的数据,在本例子就是上面的"dataBuffer"。

至此,我们的protobuffer.js就在CCC上跑起来了。

发送给服务器的数据:

CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第10张图片

服务器返回的数据:

CocosCreator-简单玩转ProtobuffJS之“跑起来”(一)_第11张图片

这样我们的protobuffjs就跑起来了。结果是简单的,过程是艰难的,踩坑是必须的。

你可能感兴趣的:(CocosCreator-简单玩转ProtobuffJS之“跑起来”(一))