當(dāng)creator遇上protobufjs—pbkiller插件

機(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

不會(huì)美術(shù)的程序做的logo

我先讓pbkiller做個(gè)自我介紹:

pbkiller: 我是一位專業(yè)的爭(zhēng)對(duì)protobuf問題訓(xùn)練有素的殺手磨淌,我可以為你輕松搞定protobuf在CocosCreaotr開發(fā)中的諸多問題疲憋,并且可以讓你隨意折磨曾經(jīng)折磨過你的protbuf問題。

一梁只、臣服

讓所有Proto都臣服在主人腳下

我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)入如下文件:

  1. protobufjs源碼(簡(jiǎn)化模式無此目錄)
  2. pbkiller源碼丸卷、及fs/path偽裝模塊
  3. 簡(jiǎn)單的測(cè)試場(chǎng)景和代碼
  4. 測(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的介紹方式杠巡,還是我寫的介紹方式?期待你的留言雇寇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氢拥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锨侯,更是在濱河造成了極大的恐慌嫩海,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囚痴,死亡現(xiàn)場(chǎng)離奇詭異叁怪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)渡讼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門骂束,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人成箫,你說我怎么就攤上這事展箱。” “怎么了蹬昌?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵混驰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我皂贩,道長(zhǎng)栖榨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任明刷,我火速辦了婚禮婴栽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辈末。我一直安慰自己愚争,他們只是感情好映皆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轰枝,像睡著了一般捅彻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鞍陨,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天步淹,我揣著相機(jī)與錄音,去河邊找鬼诚撵。 笑死缭裆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砾脑。 我是一名探鬼主播幼驶,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼韧衣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起购桑,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤畅铭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后勃蜘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硕噩,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年缭贡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了炉擅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阳惹,死狀恐怖谍失,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情莹汤,我是刑警寧澤快鱼,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站纲岭,受9級(jí)特大地震影響抹竹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜止潮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一窃判、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喇闸,春花似錦袄琳、人聲如沸询件。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雳殊。三九已至,卻和暖如春窗轩,著一層夾襖步出監(jiān)牢的瞬間琳猫,已是汗流浹背雁比。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玷禽。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像商模,于是被迫代替她去往敵國(guó)和親誉碴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一. 環(huán)境準(zhǔn)備 我一直在探索cocos H5正確的開發(fā)姿勢(shì)舌缤,目前做javascript項(xiàng)目已經(jīng)離不開 nodejs...
    張曉衡閱讀 15,259評(píng)論 2 14
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評(píng)論 6 342
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議箕戳。它實(shí)...
    香橙柚子閱讀 23,869評(píng)論 8 183
  • 阿樹:你還好嗎?我趴在窗前給你寫信国撵,十二月了陵吸,這里卻沒下過一場(chǎng)雪。我想著去年冬天我們?nèi)ネ嫜┑哪咏檠溃愎χ捌鹧?..
    晚安仔閱讀 212評(píng)論 0 0
  • 古時(shí)文雅人士講求食物的精致壮虫,觥籌交錯(cuò),吟詩作對(duì)环础,唐詩伴酒囚似,宋詞作茶。而對(duì)于普通的百姓而言线得,也只是簞食瓢飲饶唤,在陋室中...
    Aoliou閱讀 1,433評(píng)論 11 19