機(jī)緣
自從開始寫protobufjs的分享教程器瘪,就開始堅(jiān)持不懈的在CocosCreator論壇上自吹自擂,無意見被CocosCreator制作人南塔斯大神看到了绘雁。一不小心收到南大神的論壇私信橡疼,詢問我可否將protobuf的使用制作成Creator的插件,并邀我將插件入駐Creator付費(fèi)商店咧七。
收到消息的第一時(shí)間衰齐,我異常興奮。第一是我的經(jīng)驗(yàn)分享竟能受到Creator官方大神的關(guān)注继阻;其次是居然還可以入駐付費(fèi)商店耻涛,對(duì)于程序員來說莫大的欣慰就是可以將代碼變換現(xiàn)實(shí)中的價(jià)值。
pb殺手
通過一段時(shí)間的Creator插件學(xué)習(xí)與protobufjs源碼的理解瘟檩,再結(jié)合Creator項(xiàng)目經(jīng)驗(yàn)抹缕,終于完成了第一版插件。在制作插件的過程中墨辛,插件的命名是最讓我糾結(jié)的卓研,因?yàn)槲以谠?jīng)的項(xiàng)目中大量使用xxxHelper,編寫了不少輔助工具。這次為了讓我的第一個(gè)Creator插件看起來很牛逼一點(diǎn)點(diǎn)的感覺奏赘,我腦子冒出killer的字樣寥闪,隨后我就叫他:pbkiller。
我先讓pbkiller做個(gè)自我介紹:
pbkiller: 我是一位專業(yè)的爭(zhēng)對(duì)protobuf問題訓(xùn)練有素的殺手磨淌,我可以為你輕松搞定protobuf在CocosCreaotr開發(fā)中的諸多問題疲憋,并且可以讓你隨意折磨曾經(jīng)折磨過你的protbuf問題。
一梁只、臣服
我pbkiller最厲害的技能是可以快速逮捕proto文件缚柳,讓他們臣服在主人腳下,不論是在瀏覽器搪锣、手機(jī)秋忙、桌面環(huán)境上。
1. 呼喚
只需要低聲輕吟我的名字我就會(huì)出現(xiàn)在你的身邊构舟,對(duì)于我的主人我是非常溫柔的灰追。
let pbkiller = require('pbkiller');
2. 讓proto文件跪在主人面前
對(duì)于proto文件我是殘忍的,但請(qǐng)主人預(yù)先將所有proto文件放在assets/resources/pb目錄旁壮,輸入loadAll()指令监嗜,我會(huì)將proto文件一網(wǎng)打盡,讓它們?nèi)抗蛟谀愕拿媲啊?/p>
let pb = pbkiller.loadAll(); //所有proto對(duì)象都集中在返回的pb對(duì)象上
3. 讓json格式同樣下跪
如果主人喜歡json格式的proto文件抡谐,目前需要麻煩主人先使用protobufjs附帶的pbjs工具將proto文件轉(zhuǎn)換成json格式存放在assets/resources/pb目錄裁奇,同樣跪下。
let pb = pbkiller.loadAll('json'); //所有proto對(duì)象都集中在返回的pb對(duì)象上
4. 逮捕指定文件名中的的proto文件
如果主人只需逮捕某一個(gè)或多個(gè)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文件
主人,我默認(rèn)的逮捕路徑是assets/resources/pb免胃,可以通過下面屬性修改路徑音五。
//使用root屬性修改路徑
pbkiller.root = 'my-pb-path';
//此時(shí)逮捕路徑為:assets/resources/my-pb-path
pbkiller.loadAll();
二、折磨
雖然我們名字中帶有killer羔沙,但是最高興不是一下子把敵人殺掉躺涝,而是折磨它,因?yàn)樗?jīng)可能折磨過我的主人扼雏,所以不能讓它死的太簡(jiǎn)單了坚嗜,哈哈哈。
1. 揪出一個(gè)proto給主人扭打(實(shí)例化)
主人诗充,我把proto給你抓來了苍蔬,你可以使用new關(guān)鍵字,隨意扭打proto了蝴蜓。
//逮捕所有proto文件碟绑,并指定編譯grace.proto.msg包路徑下的所有對(duì)象
let pb = pbkiller.loadAll('proto', 'grace.proto.msg');
let player = new pb.Player(); //扭打Player
player.name = 'ShawnZhang'; //再踹一腳
2.挨一輪巴掌與低聲哭(序列化與反序列化)
主人俺猿,讓proto挨一輪巴掌使用toArrayBuffer,如果你覺得有點(diǎn)累可以使用toBuffer他們的效果完全是一樣的格仲。
let player = new pb.Player(); //先扭打
let data = player.toBuffer(); //再來一巴掌
上面我們把player打成了data押袍,現(xiàn)在把它打回來,讓他哭一下就好了抓狭,但是只是小聲的哭伯病,請(qǐng)下答decode指令。
let player = pb.Player.decode(data); //主人允許你小聲哭否过,回來吧
三、內(nèi)訌
我:“pbkiller沒想到你的話這么多惭蟋,讓你自己我介紹一下下苗桂,講這么大一堆。對(duì)待proto這么殘忍告组,又主人主人的煤伟,特別肉麻,好惡心”木缝。
pbkiller:“這年頭便锨,你以為殺手是那么容易當(dāng)?shù)拿矗瑲⑹忠惨獙W(xué)會(huì)自我營(yíng)銷我碟,注重用戶體驗(yàn)放案,你以前那種介紹方式out了”。
我:“你居然敢說我out了矫俺,小心我把你給kill了”吱殉。
pbkiller:“你是老大,你說了算厘托,我看有多少人喜歡你說話的方式” pbkiller一臉鄙夷的神情友雳。
四、正式說明
pbkiller插件是為了在CocosCreator中簡(jiǎn)化protobufjs庫的使用铅匹,并且可以讓protobuffer工作在瀏覽器和jsb環(huán)境上押赊。
1.安裝
pbkiller插件有兩種安裝模式:
- install-src:源碼模式,此模式會(huì)將protobufjs原碼導(dǎo)入項(xiàng)目中包斑,不依賴任何外部文件流礁。對(duì)npm不熟悉的用戶推薦使用此模式安裝。
- install-lite:簡(jiǎn)化模式舰始,此模式需要提前安裝protobufjs npm模塊崇棠,安裝命令:npm install protobufjs@5
安裝完成后,會(huì)導(dǎo)入如下文件:
- protobufjs源碼(簡(jiǎn)化模式無此目錄)
- pbkiller源碼丸卷、及fs/path偽裝模塊
- 簡(jiǎn)單的測(cè)試場(chǎng)景和代碼
- 測(cè)試proto文件
下面是導(dǎo)入文件和目錄結(jié)構(gòu):
pbkiller
├── protobuf protobufjs源碼
│ ├── bytebuffer.js
│ ├── long.js
│ └── protobufjs.js
├── src pbkiller源碼
│ ├── fs.js fs偽裝
│ ├── path.js path偽裝
│ └── pbkiller.js pbkillers核心代碼
└── test
├── test-pbkiller.fire 測(cè)試場(chǎng)景
└── test-pbkiller.js 測(cè)試組件代碼
resources resource/pb是默認(rèn)的proto文件存放的根目錄
└── pb 以下文件為測(cè)試用proto文件枕稀,可以自行刪除
├── ActionCode.proto
├── ChatMsg.proto
├── Player.json
└── Player.proto
2. 快速使用
導(dǎo)入模塊
let pbkiller = require('pbkiller');
加載resources/pb目錄下所有proto文件
//加載所有proto文件
let pb = pbkiller.loadAll();
//實(shí)例化proto中的Player對(duì)象
let player = new pb.grace.proto.msg.Player();
指定文件格式:[proto|json] 默認(rèn)為proto
//注意json文件是由protobufjs提供的pbjs工個(gè)生成
let pb = pbkiller.loadAll('json');
指定編譯的對(duì)象路徑
let pb = pbkiller.loadAll('proto', 'grace.proto.msg');
cc.log(new pb.Player());
3. 特別注意
在加載proto時(shí)可以使用擴(kuò)?展名為.proto和.json?的文件,pbkiller支持兩?種混用,但?需要特別注意的如果有proto之間有依賴關(guān)系萎坷,請(qǐng)保證??依賴文件之間是相同的文件格式凹联。
五、期待
目前pbkiller在Cocos商店已經(jīng)上架哆档,不過官方為了嚴(yán)格測(cè)試整個(gè)付費(fèi)商店的上傳蔽挠、審核、支付等流程瓜浸,可能還需要等待一段時(shí)間才能下載澳淑,敬請(qǐng)期待。
我很想知道插佛,你們是喜歡pbkiller的介紹方式杠巡,還是我寫的介紹方式?期待你的留言雇寇。