pb杀手

我先让pbkiller做个自我介绍

pbkiller:我是一位专业的争对 protobuf 问题训练有素的杀手,我可以为您轻松搞定 protobuf 在 Cocos Creaotr 开发中的诸多问题,并且可以让你随意折磨曾经折磨过你的 protbuf 问题。

一、臣服

我 pbkiller 最厉害的技能是可以快速逮捕 proto 文件,让他们臣服在主人脚下,不论是在浏览器、手机、桌面环境上。

1. 呼唤

只需要低声轻吟我的名字我就会出现在你的身边,对于我的主人我是非常温柔的。

let pbkiller = require('pbkiller');

2. 让 proto 文件跪在主人面前

对于 proto 文件我是残忍的,但请主人预先将所有 proto 文件放在 assets/resources/pb 目录,召唤一声 preload,我立马就到,您再使用 loadAll() 指令,我会将 proto 文件一网打尽,让它们全部跪在您的面前。

//所有proto对象都集中在返回的pb对象上
pbkiller.preload(() => {
let pb = pbkiller.loadAll();
});

3. 让 JSON 格式同样下跪

如果主人喜欢json格式的proto文件,目前需要麻烦主人先使用 protobufjs 附带的pbjs工具将 proto 文件转换成 json 格式存放在 assets/resources/pb 目录,有我在让它同样跪下。

//所有proto对象都集中在返回的pb对象上
let pb = pbkiller.loadAll('json');

4. 逮捕指定文件名中的的proto文件

如果主人只需逮捕某一个或多个proto文件,可以使用loadFromFile。


let pb = pbkiller.loadFromFile('xxx.proto'); let pb = pbkiller.loadFromFile(['xxx.proto', 'yyy.proto']); let pb = pbkiller.loadFromFile(['xxx.json', 'yyy.json']);

5. 逮捕不同地域的proto文件

主人,我默认的逮捕路径是 assets/resources/pb,可以通过下面属性修改路径。


//使用root属性修改路径
pbkiller.root = 'my-pb-path'; //此时逮捕路径为:assets/resources/my-pb-path
pbkiller.loadAll();

二、折磨

虽然我们名字中带有killer,但是最高兴的不是一下子把敌人杀掉,而是折磨它,因为他曾经可能折磨过我的主人,所以不能让它死的太简单了,哈哈哈。

1. 揪出一个proto给主人扭打(实例化)

主人,我把 proto 给你抓来了,你可以使用 new 关键字,随意扭打 proto 了。

//逮捕所有proto文件,并指定编译grace.proto.msg包路径下的所有对象
let pb = pbkiller.loadAll('proto', 'grace.proto.msg'); let player = new pb.Player(); //扭打Player
player.name = 'ShawnZhang'; //再踹一脚

2.挨一轮巴掌与低声哭(序列化与反序列化)

主人,让 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 版本!

1.安装

pbkiller插件有两种安装模式:

  • install-src:源码模式,此模式会将protobufjs原码导入项目中,不依赖任何外部文件。对npm不熟悉的用户推荐使用此模式安装。
  • install-lite:简化模式,此模式需要提前安装protobufjs npm模块,安装命令:npm install protobufjs@5

安装完成后,会导入如下文件:

  1. protobufjs源码(简化模式无此目录)
  2. pbkiller源码、及fs/path伪装模块
  3. 简单的测试场景和代码
  4. 测试proto文件

下面是导入文件和目录结构:

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

2. 快速使用

导入模块

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());

3. 特别注意

在加载proto时可以使用扩展名为.proto.json的文件,pbkiller支持两种混用,但需要特别注意的如果有proto之间有依赖关系,请保证依赖文件之间是相同的文件格式。

最近太多人问Protobuf的问题了,把这个重新搬出来!的更多相关文章

  1. C# Winform开发以及控件开发的需要注意的,被人问怕了,都是基础常识

    我是搞控件开发的,经常被人问,所以把一些问题记录了下来!如果有人再问,直接把地址丢给他看. 一. 经常会有人抱怨Winform界面闪烁,下面有几个方法可以尽可能的避免出现闪烁 1.控件的使用尽量以纯色 ...

  2. 再有人问你synchronized是什么,就把这篇文章发给他

    在再有人问你Java内存模型是什么,就把这篇文章发给他.中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronize ...

  3. TNS-12532: TNS:invalid argument,Oracle的报错信息太让人无语

    TNS-12532: TNS:invalid argument,Oracle的报错信息太让人无语 现象: Tnsping报错: [oracle@unicomGZ01 admin]$ ../../bin ...

  4. 再有人问你HashMap,把这篇文章甩给他!

    声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java==集合中的精髓==了,如果你觉得自己对 ...

  5. 再有人问你HashMap,把这篇文章甩给他

    搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java==集合中的精髓==了,如果你觉得自己对它掌握的还不够好,我想今天这篇文 ...

  6. [转] 以后再有人问你selenium是什么,你就把这篇文章给他

    本文转自:https://blog.csdn.net/TestingGDR/article/details/81950593 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论 ...

  7. 再有人问你Java内存模型是什么,就把这篇文章发给他

    前几天,发了一篇文章,介绍了一下JVM内存结构.Java内存模型以及Java对象模型之间的区别.有很多小伙伴反馈希望可以深入的讲解下每个知识点.Java内存模型,是这三个知识点当中最晦涩难懂的一个,而 ...

  8. C C++ 常被人问的问题分析

    正文  -  开始了, 直接扯淡 以下都是自己面试中遇到的常见的问题.如有不妥的地方就当见笑了. 哈哈 1. 谈谈你们服务器的架构吧. 分析: 假如这是第一个问题, 你可以走了. 可能各方面原因他不想 ...

  9. 最近很多人问我:saiku下载不下来

    saiku的前段团队 在UI设计方面很专业.但是兼容性差到让人无语.不知道为什么,是不是不给钱,人家故意黑它. 一直忙别的工作,现在整理一些saiku相关网站,百度不到的,google又要FQ.看个合 ...

随机推荐

  1. B-generator 1_2019牛客暑期多校训练营(第五场)

    题意 给出\(x0,x1,a,b\), \(x_i = a\cdot x_{i-1} + b\cdot x_{i-2}\),问\(x_n取模mod\) 题解 用十进制快速幂,二进制快速幂是每到下一位就 ...

  2. 牛客多校第七场 C Bit Compression 思维

    链接:https://www.nowcoder.com/acm/contest/145/C来源:牛客网 A binary string s of length N = 2n is given. You ...

  3. codeforces 755D. PolandBall and Polygon(线段树+思维)

    题目链接:http://codeforces.com/contest/755/problem/D 题意:一个n边形,从1号点开始,每次走到x+k的位置如果x+k>n则到x+k-n的位置,问每次留 ...

  4. 【Offer】[48] 【最长不含重复字符的子字符串】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.假设字符串中只包含'a'~'z'的字符.例如,在字符串&q ...

  5. springcloud(五):Spring Cloud 配置中心的基本用法

    Spring Cloud 配置中心的基本用法 1. 概述 本文介绍了Spring Cloud的配置中心,介绍配置中心的如何配置服务端及配置参数,也介绍客户端如何和配置中心交互和配置参数说明. 配置中心 ...

  6. linux常用命令三

    linux常用命令三 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 ...

  7. NOIP2009 1.多项式输出

    题目: 其中,aixi称为 i 次项,ai 称为 i 次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式: 1. 多项式中自变量为 x,从左到右按照次数递减顺序给出多 ...

  8. 【学习笔记】第四章 Python3核心技术与实践--列表与元组

    前面的课程,我们了解了Python 语言的学习方法,并且带你了解了 Python 必知的常用工具——Jupyter.接下来我们正式学习 Python 的具体知识. 对于每一门编程语言来说,数据结构都是 ...

  9. 数据可视化之3D中国

    本文链接:https://blog.csdn.net/zhai_865327/article/details/82983489 其实一般情况下2D平面地图就够用了,但是为了更加美观及突出效果,就需要3 ...

  10. nfs 存储服务

    今日内容: NFS 1.什么是nfs? network file system 网络文件系统 nfs共享存储 2.nfs能干什么? nfs 能为 不同主机系统之间 实现 文件的共享 3.为什么要使用n ...