我先让pbkiller作个自我介绍npm
pbkiller:我是一位专业的争对 protobuf 问题训练有素的杀手,我能够为您轻松搞定 protobuf 在 Cocos Creaotr 开发中的诸多问题,而且可让你随意折磨曾经折磨过你的 protbuf 问题。json
我 pbkiller 最厉害的技能是能够快速逮捕 proto 文件,让他们臣服在主人脚下,不管是在浏览器、手机、桌面环境上。浏览器
只须要低声轻吟个人名字我就会出如今你的身边,对于个人主人我是很是温柔的。bash
let pbkiller = require('pbkiller');
复制代码
对于 proto 文件我是残忍的,但请主人预先将全部 proto 文件放在 assets/resources/pb
目录,召唤一声 preload,我立马就到,您再使用 loadAll() 指令,我会将 proto 文件一网打尽,让它们所有跪在您的面前。工具
//全部proto对象都集中在返回的pb对象上
pbkiller.preload(() => {
let pb = pbkiller.loadAll();
});
复制代码
若是主人喜欢json格式的proto文件,目前须要麻烦主人先使用 protobufjs 附带的pbjs工具将 proto 文件转换成 json 格式存放在 assets/resources/pb 目录,有我在让它一样跪下。测试
//全部proto对象都集中在返回的pb对象上
let pb = pbkiller.loadAll('json');
复制代码
若是主人只需逮捕某一个或多个proto文件,可使用loadFromFile。ui
let pb = pbkiller.loadFromFile('xxx.proto');
let pb = pbkiller.loadFromFile(['xxx.proto', 'yyy.proto']);
let pb = pbkiller.loadFromFile(['xxx.json', 'yyy.json']);
复制代码
###5. 逮捕不一样地域的proto文件spa
主人,我默认的逮捕路径是 assets/resources/pb,能够经过下面属性修改路径。插件
//使用root属性修改路径
pbkiller.root = 'my-pb-path';
//此时逮捕路径为:assets/resources/my-pb-path
pbkiller.loadAll();
复制代码
虽然咱们名字中带有killer,可是最高兴的不是一会儿把敌人杀掉,而是折磨它,由于他曾经可能折磨过个人主人,因此不能让它死的太简单了,哈哈哈。code
主人,我把 proto 给你抓来了,你可使用 new 关键字,随意扭打 proto 了。
//逮捕全部proto文件,并指定编译grace.proto.msg包路径下的全部对象
let pb = pbkiller.loadAll('proto', 'grace.proto.msg');
let player = new pb.Player(); //扭打Player
player.name = 'ShawnZhang'; //再踹一脚
复制代码
主人,让 proto 挨一轮巴掌使用 toArrayBuffer,若是你以为有点累可使用 toBuffer 他们的效果彻底是同样的。
let player = new pb.Player(); //先扭打
let data = player.toBuffer(); //再来一巴掌
复制代码
上面咱们把player打成了data,如今把它打回来,让他哭一下就行了,可是只是小声的哭,请下答decode指令。
//主人容许你小声哭,回来吧
let player = pb.Player.decode(data);
复制代码
我:“pbkiller没想到你的话这么多,让你本身我介绍一下下,讲这么大一堆。对待proto这么残忍,又主人主人的,特别肉麻,好恶心”。
pbkiller:“这年头,你觉得杀手是那么容易当的么,杀手也要学会自我营销,注重用户体验,你之前那种介绍方式out了”。
我:“你竟然敢说我out了,当心我把你给kill了”。
pbkiller:“你是老大,你说了算,我看有多少人喜欢你说话的方式” pbkiller一脸鄙夷的神情。
pbkiller 插件库能够帮助你在 Cocos Creator 中简化 protobufjs 的使用,并兼容全部平台和 Creator 版本!
pbkiller插件有两种安装模式:
安装完成后,会导入以下文件:
下面是导入文件和目录结构:
pbkiller
├── protobuf protobufjs源码
│ ├── bytebuffer.js
│ ├── long.js
│ └── protobufjs.js
├── src pbkiller源码
│ ├── fs.js fs假装
│ ├── path.js path假装
│ └── pbkiller.js pbkillers核心代码
└── test
├── test-pbkiller.fire 测试场景
└── test-pbkiller.js 测试组件代码
resources resource/pb是默认的proto文件存放的根目录
└── pb 如下文件为测试用proto文件,能够自行删除
├── ActionCode.proto
├── ChatMsg.proto
├── Player.json
└── Player.proto
复制代码
导入模块
let pbkiller = require('pbkiller');
复制代码
加载resources/pb目录下全部proto文件
//加载全部proto文件
let pb = pbkiller.loadAll();
//实例化proto中的Player对象
let player = new pb.grace.proto.msg.Player();
复制代码
指定文件格式:[proto|json] 默认为proto
//注意json文件是由protobufjs提供的pbjs工个生成
let pb = pbkiller.loadAll('json');
复制代码
指定编译的对象路径
let pb = pbkiller.loadAll('proto', 'grace.proto.msg');
cc.log(new pb.Player());
复制代码
在加载proto时可使用扩展名为**.proto和.json**的文件,pbkiller支持两种混用,但须要特别注意的若是有proto之间有依赖关系,请保证依赖文件之间是相同的文件格式。