物理編輯器篇(PhysicsEditor)
在Box2D中,除了可以使用內置的幾種基本形狀之外,它還支持從外部文件中進行材質(b2Fixture)的創建。在創建一些復雜的剛體形狀時,單純的使用多邊形描點是一個比較費勁的工作,這時候借助PhysicsEditor這款出色的物理材質編輯器來進行可視化編輯會大大提高效率。
一、形狀編輯
如上圖所示,PhysicsEditor的主界面大致分為四個區域(工具欄、形狀列表、形狀編輯面板和參數編輯面板)。
1、工具欄(ToolsBar)
工具欄位于界面的頂部(如果Windows版本的話,在工具欄上方還有有一行菜單欄),工具欄從左往右依次包含以下6個工具項。
- New:新建文件。
- Open:打開一個已有的物理材質編輯文件。
- Save:保存當前的編輯文件。
- Publish:導出配置文件。
- Publish As:導出所有。
- Add Sprites:添加精靈。
2、形狀列表(Shapes)
形狀列表的面板默認在主界面的左邊位置,該面板顯示的是文件編輯的形狀。為了方便編輯形狀,開發者可以直接將要編輯的形狀對應的圖片拖進該面板松開。
如果要刪除某個形狀,只需要在Shapes面板上面選中要刪除的形狀,然后點擊面板右下角的刪除按鈕即可。(圖片的名字會默認為形狀的名稱,以便導出到文件最后在代碼里面使用,所以一般使用合法標識符對圖片命名。)
3、形狀編輯面板(Editor)
主界面中央是用于編輯形狀的面板,選中Shapes面板上面的形狀后,該面板會顯示對應的圖片,開發者可以根據圖片的輪廓進行描點,編輯出想要的形狀。
形狀編輯面板的頂部是一組形狀編輯工具,從左往右依次是:圓形、多邊形、魔術棒、左右對稱、上下對稱、頂點的x坐標值、頂點的y坐標值和一個刪除按鈕。
3.1、魔術棒
在形狀列表里面選擇一個形狀(我這里的carBody_1),這樣便可以編輯carBody_1的形狀了。先從魔術棒開始吧,點擊魔術棒之后,編輯器會彈窗(如上圖)顯示自動描繪的形狀頂點,直接點擊右下角的“OK”按鈕。物理編輯器根據圖片的像素點自動生成了一個多邊形(如下圖)。
3.2、多邊形
雖然編輯器可以使用魔術棒自動生成多邊形,但是這樣形成的多邊形頂點個數太多,會影響物理模擬的性能(計算量增加了),所以對于多邊形,通常建議開發者使用多邊形手動編輯(不用太過精確)。
點擊多邊形按鈕,我們可以看到多生成了一個三角形(多邊形默認為三角形),如下圖:
新建形狀后,原本使用魔術棒生成的形狀會變灰掉,開發者可以點擊灰掉的形狀(形狀變成紅色選中狀態),然后點擊編輯面板右上角的刪除按鈕(y值右邊的那個按鈕)去除不要的形狀。
生成的多邊形默認在圖片的左下角位置,開發者可以手動將其拖拽到合適的位置。然后,可以在形狀相應的邊線附近雙擊添加一個頂點(也可以右鍵創建一個頂點)。
編輯好形狀之后,可以選中一個頂點,然后頂部的x和y后面的文本框就會現實該頂點的坐標值,開發者可以手動輸入進行微調(如上圖)。
3.3、圓形
在形狀列表選擇wheel_1,然后點擊形狀編輯面板頂部的圓形按鈕,這樣就可以創建一個圓的形狀。圓形在形狀右邊(3點鐘位置)有一個頂點,拖拽它便可以調整圓形的大小。
3.4、形狀鏡像顯示
如果要把編輯好的形狀變成它的左右翻轉鏡像或者上下翻轉的鏡像,只需要點擊一下左右對稱或者上下對稱按鈕,這里就不再贅述(自己玩去,點個按鈕反正很簡單,不想寫,任性--!)。
3.5、縮放編輯面板
由于編輯面板的大小受限,很多時候如果要編輯的圖片比較大,或者想要描點更加精確,開發者可以使用形狀編輯面板底部的縮放功能,默認是原圖大小。
4、參數面板(Parameters)
參數面板分為:Exporter(導出)、Image parameters(圖片參數)、Body parameters(剛體參數)和Fixture parameters(材質/夾具參數)四個部分。
在沒有創建形狀的時候,參數面板上面的部分參數是無法進行編輯的。
4.1、Exporter
Exporter用于設置導出的文件格式,默認為“AndEngine Exporter(XML)”,該選項是一個下拉選擇列表,開發者可以根據使用情景選擇合適的導出格式。這里我選擇“Box2D generic(PLIST)”。
4.2、Gloabl parameters(全局參數)
當Exporter設置為Box2D generic(PLIST)選項后,原本的Body parameters便沒有了,反而多出了一個Gloabl parameters(全局參數),全局參數里面可以設置“PTM-Ratio”(Cocos2D與Box2D的度量單位的一個縮放系數)。
PTM-Ratio默認值是32,通常在Cocos2D中也是使用32,但是這邊需要將其設置為64,否則在創建的時候會發現剛體過大(具體原因我也沒有去深究)。
4.3、Image parameters
在Image parameters中,我們通常也只需要關注“Relative”這一項,其它的都可以不用管(看看就知道其它參數是什么意思)。
當Exporter設置為Box2D generic(PLIST)選項后,在形狀編輯面板的左下角便會多出一個小圓圈(如下圖)。
這個圓圈表示的是剛體的質心(搓一點的人就把它當成中心點吧)。我們可以手動拖動這個小圓圈到想要設置的位置,通常是圖片的中間,因為Cocos2D的精靈(Sprite)默認的錨點在中心點,這樣設置方便進行物理世界和渲染世界的效果同步。
在拖動小圓圈的時候就會發現,Relative參數的對應的在變化,開發者可以直接在Relative后面的兩個輸入框里面把值改成0.5,這樣就肯定居中了。
4.4、Fixture parameters
在材質參數這邊一共有7個個參數要設置。
- Density:密度,用于設置形狀的密度,間接的影響剛體的質量。
- Restitution:恢復系數,控制剛體發生碰撞時,能量的損失。0表示完全非彈性碰撞,1表示完全彈性碰撞。
- Friction:摩擦系數,用于模擬形狀的摩擦效果。
- Is Sensor:是否為傳感器類型,勾選時表示該形狀發生碰撞時可以接收到碰撞信息,觸發碰撞回調,但是沒有碰撞的效果。
- Id:剛體的id。
- Group:碰撞組,用于碰撞檢測,默認為0。
除了上述6個參數之外,在Group下面還有16個碰撞種群的設置,用于進行碰撞篩選:
- Bit's name:種群名稱。
- Cat:剛體所在的種群(可以多選),默認選擇第一個。
- Mask:與該形狀發生碰撞的種群(可以多選),勾選后即表示當前形狀可以與對應的種群的剛體發生碰撞。
二、文件導出和保存
編輯結束后點擊頂部工具欄的“Publish”按鈕,進行導出,Publish導出的是plist格式,可以在Cocos2D中進行解析(關于如何使用該文件將在下一篇關于關節的篇幅中介紹)。
除此之外,我們還需要“CTRL + S”或者點擊工具欄的“Save”按鈕將文件保存成pes格式的文件,pes格式的文件可以使用PhysicsEditor直接打開,方便后續開發中進行修改。