zoukankan      html  css  js  c++  java
  • 最近太多人问Protobuf的问题了,把这个重新搬出来!

    pb杀手

    我先让pbkiller做个自我介绍

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

    一、臣服

    让所有Proto都臣服在主人脚下

    我 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之间有依赖关系,请保证依赖文件之间是相同的文件格式。

    file

    file

  • 相关阅读:
    HTTP协议
    MySQL建立主-从服务器双机热备配置
    centOS7安装配置mysql5.7.21
    修改docker镜像的默认存储目录
    docker--学习笔记
    MySQL数据库操作
    zabbix注意事项和常用命令
    CnentOS6.5安装zabbix2.2
    如何查询一个进程下面的线程数(进程和线程区别)
    OSPF与ACL实例
  • 原文地址:https://www.cnblogs.com/creator-star/p/11578252.html
Copyright © 2011-2022 走看看