最近太多人問Protobuf的問題了,把這個從新搬出來!

pb殺手

我先讓pbkiller作個自我介紹npm

pbkiller:我是一位專業的爭對 protobuf 問題訓練有素的殺手,我能夠爲您輕鬆搞定 protobuf 在 Cocos Creaotr 開發中的諸多問題,而且可讓你隨意折磨曾經摺磨過你的 protbuf 問題。json

1、臣服

讓全部Proto都臣服在主人腳下

我 pbkiller 最厲害的技能是能夠快速逮捕 proto 文件,讓他們臣服在主人腳下,不管是在瀏覽器、手機、桌面環境上。瀏覽器

1. 呼喚

只須要低聲輕吟個人名字我就會出如今你的身邊,對於個人主人我是很是溫柔的。bash

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。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();
複製代碼

2、折磨

雖然咱們名字中帶有killer,可是最高興的不是一會兒把敵人殺掉,而是折磨它,由於他曾經可能折磨過個人主人,因此不能讓它死的太簡單了,哈哈哈。code

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);
複製代碼

3、內訌

我:「pbkiller沒想到你的話這麼多,讓你本身我介紹一下下,講這麼大一堆。對待proto這麼殘忍,又主人主人的,特別肉麻,好惡心」

pbkiller:「這年頭,你覺得殺手是那麼容易當的麼,殺手也要學會自我營銷,注重用戶體驗,你之前那種介紹方式out了」。

我:「你竟然敢說我out了,當心我把你給kill了」。

pbkiller:「你是老大,你說了算,我看有多少人喜歡你說話的方式」 pbkiller一臉鄙夷的神情。

4、正式說明

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
相關文章
相關標籤/搜索