天天看點

當creator遇上protobufjs|結晶 pb殺手 一、臣服 二、折磨 三、内讧 四、正式說明 五、期待

pb殺手

通過一段時間的Creator插件學習與protobufjs源碼的了解,再結合Creator項目經驗,終于完成了第一版插件。在制作插件的過程中,插件的命名是最讓我糾結的,因為我在曾經的項目中大量使用xxxHelper,編寫了不少輔助工具。這次為了讓我的第一個Creator插件看起來很牛逼一點點的感覺,我腦子冒出killer的字樣,随後我就叫他:pbkiller。

當creator遇上protobufjs|結晶 pb殺手 一、臣服 二、折磨 三、内讧 四、正式說明 五、期待

我先讓pbkiller做個自我介紹:

pbkiller: 我是一位專業的争對protobuf問題訓練有素的殺手,我可以為你輕松搞定protobuf在CocosCreaotr開發中的諸多問題,并且可以讓你随意折磨曾經折磨過你的protbuf問題。

一、臣服

當creator遇上protobufjs|結晶 pb殺手 一、臣服 二、折磨 三、内讧 四、正式說明 五、期待

我pbkiller最厲害的技能是可以快速逮捕proto檔案,讓他們臣服在主人腳下,不論是在浏覽器、手機、桌面環境上。

1. 呼喚

隻需要輕聲低吟我的名字我就會出現在你的身邊,對于我的主人我是非常溫柔的。

let pbkiller = require('pbkiller');
           

2. 讓proto檔案跪在主人面前

對于proto檔案我是殘忍的,但請主人預先将所有proto檔案放在assets/resources/pb目錄,輸入loadAll()指令,我會将proto檔案一網打盡,讓它們全部跪在你的面前。

let pb = pbkiller.loadAll(); //所有proto對象都集中在傳回的pb對象上
           

3. 讓json格式同樣下跪

如果主人喜歡json格式的proto檔案,目前需要麻煩主人先使用protobufjs附帶的pbjs工具将proto檔案轉換成json格式存放在assets/resources/pb目錄,同樣跪下。

let pb = pbkiller.loadAll('json'); //所有proto對象都集中在傳回的pb對象上
           

4. 逮捕指定檔案名中的的proto檔案

當creator遇上protobufjs|結晶 pb殺手 一、臣服 二、折磨 三、内讧 四、正式說明 五、期待

如果主人隻需逮捕某一個或多個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();
           

二、折磨

當creator遇上protobufjs|結晶 pb殺手 一、臣服 二、折磨 三、内讧 四、正式說明 五、期待

雖然我們名字中帶有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插件是為了在CocosCreator中簡化protobufjs庫的使用,并且可以讓protobuffer工作在浏覽器和jsb環境上。

1.安裝

pbkiller插件有兩種安裝模式:

  • install-src:源碼模式,此模式會将protobufjs原碼導入項目中,不依賴任何外部檔案。對npm不熟悉的使用者推薦使用此模式安裝。
  • install-lite:簡化模式,此模式需要提前安裝protobufjs npm子產品,安裝指令:npm install [email protected]

安裝完成後,會導入如下檔案:

  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之間有依賴關系,請保證依賴檔案之間是相同的檔案格式。

五、期待

目前pbkiller在Cocos商店已經上架,你可以使用CocosCreator1.6.1下載下傳安裝,也可以通過下面連結獲得

http://store.cocos.com/stuff/show/178906.html

我很想知道,你們是喜歡pbkiller的介紹方式,還是我寫的介紹方式?期待你的留言。

歡迎關注「奎特爾星球」微信公衆号,有代碼、有教程、有視訊、有故事,一起玩來玩吧!

當creator遇上protobufjs|結晶 pb殺手 一、臣服 二、折磨 三、内讧 四、正式說明 五、期待

繼續閱讀