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
安裝完成后,會導入如下文件:
- protobufjs源碼(簡化模式無此目錄)
- pbkiller源碼、及fs/path偽裝模塊
- 簡單的測試場景和代碼
- 測試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之間有依賴關系,請保證依賴文件之間是相同的文件格式。