![精通Cocos2d-x游戏开发(进阶卷)](https://wfqqreader-1252317822.image.myqcloud.com/cover/910/26943910/b_26943910.jpg)
10.5 Box2d的相关工具
Box2d的编辑器不少,但功能大多比较简单,主要有PhysicsEditor、BoxCAD、Physics Body Editor、Vertex Helper等。编辑器主要可以用于编辑物理形状,这样就不需要在代码中使用大量的坐标编码来描述形状给Box2d,而是由编辑器来描述形状,我们只需要调用简单的接口,就可以把复杂的物理形状创建出来,大大减少了代码中的硬编码,同时也有利于后期物理形状的调整。
10.5.1 PhysicsEditor介绍
PhysicsEditor与TexturePacker是同一个公司开发的,支持Windows和Mac,可以用来简单地编辑一些形状,然后导出Plist,其工具界面如图10-4所示,官方提供了一个简单的解析类供用户使用,虽然是收费软件,但仍可以免费使用,只不过有两个限制,即导出的Plist不能超过10个shape;每次导出要等5秒才能导出。这个工具用来编辑物体的物理形状,还是很不错的。在导出的时候,需要在导出界面的右上角选择导出格式,注意选择Box2D generic Plist选项导出。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0163_0001.jpg?sign=1738849572-38zwm0QgN2bMAEqn6GvprdtM9mZ5BzGT-0-7edf2392dc21967dd45c87a55c918401)
图10-4 PhysicsEditor编辑器
使用PhysicsEditor进行编辑,一般的步骤如下。
(1)先把要编辑的物理对象的图片添加到PhysicsEditor中,如图10-5所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0163_0002.jpg?sign=1738849572-nUiZZthswFvfeC1b3uWeGpZOj3YTVtXu-0-cf35e219393e9f3c143e899902122221)
图10-5 添加图片
(2)为物理形状起一个名字,在所有的物理形状中,这个名字必须是唯一的,如图10-6所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0164_0001.jpg?sign=1738849572-DQYlyYtQEITjGSJ345vYu1jJ3o5IEWOC-0-2161f6faf57985691142d5f9e75bb97a)
图10-6 为形状起名字
(3)单击上方的形状按钮,添加形状到物理对象中,可以选择圆形、三角形、描点,然后调整添加的形状,最右边的两个按钮是对当前选择的图形进行镜像翻转,方便编辑一些对称形状,如图10-7所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0164_0002.jpg?sign=1738849572-C7rOzlgKlx1elmJf01NQIWK98lkzrF9k-0-b6d1146439359eb0c64493dd261f083d)
图10-7 工具栏
(4)选择抠图工具可以快速地勾勒出复杂的形状,其选项中,Tolerance(容差)值越高,顶点就越少,Alpha threshold(透明极限)值越高,抠图的区域(红色区域)就越精细。Trace mode(追踪模式)有Straight(直线模式)和Natural(自然模式)两个选项可以选择,直线模式的顶点会更少一些,自然模式会更精细一些。Frame mode(帧模式)适用于需要描述多个物理形状之间的相交或者集合,如图10-8所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0164_0003.jpg?sign=1738849572-x1YRLEA5gj91qJi2oio684HGFUIQJLhQ-0-0fa7808c7bab6c4baafd3986d24d1b0f)
图10-8 抠图工具
(5)选择导出模式为Box2D generic (PLIST)尤为重要,因为这是要为Cocos2d-x、Box2d导出的形状文件,选择不同的导出模式会有不同的附加选项可供选择,如图10-9所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0164_0004.jpg?sign=1738849572-bF6SSSFJFz0vHwUGhI7DqTxc7KKqKbVn-0-fb20aa8c4452e729b9fb24c427b1b48f)
图10-9 导出格式
(6)还需要填写锚点的值,一般都是将锚点设置为0.5,0.5,所以这里将Relative选项的值都填为0.5,0.5,然后为密度、弹性和摩擦力选项赋值,弹性和摩擦力的取值范围是0~1,而密度的单位应该是kg/m3,如图10-10所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0165_0001.jpg?sign=1738849572-Q27S9eskKAUn2oMfIfAyF2KEOcgXVb0O-0-b689c451611f1ba6dd9a470987da3414)
图10-10 属性设置
(7)在属性面板的最下方还有一个多选菜单,左边的Cat.表示你自己的碰撞属性,右边的Mask表示你能与哪些物体碰撞,例如,这里你的碰撞属性是bit_0,则可以与所有对象碰撞,假设Mask的bit_0没有选中,那么这个物理对象不会和另外一个相同类型的物理对象发生碰撞,但可以和其他的物理对象发生碰撞。选中Cat.表示这个物理对象是什么,而选中Mask表示你能和什么物理对象发生碰撞(所有默认的物理对象的Cat.都是bit_0),如图10-11所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0165_0002.jpg?sign=1738849572-JtVpWaT5ytWWDvG2jqVz2SWedpsxW8T6-0-04cdcf126bc2776314630c33629e22c1)
图10-11 碰撞掩码设置
(8)最后,单击上方的Publish或Publish As按钮,就可以导出Plist文件了,Plist文件可以直接在Cocos2d-x中使用。在PhysicsEditor的安装目录下,Documentation目录中有如何使用PhysicsEditor的相关文档,Examples目录下有多种引擎使用PhysicsEditor的示例,Loaders目录下有多种引擎加载PhysicsEditor导出的Plist文件的加载器,Cocos2d-x只需要包含GB2ShapeCache-x.h和GB2ShapeCache-x.cpp文件即可。
10.5.2 BoxCAD介绍
BoxCAD是一个在线编辑Box2d的网站,可以编辑各种形状和关节,然后播放演示,Dump Code按钮可以自动生成所编辑内容的AS代码,并下载下来,Box2d使用的各种语言代码都是比较相似的,可以简单修改一下,放到Cocos2d-x中(TestBed框架),如图10-12所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0166_0001.jpg?sign=1738849572-pwwjyfnVBbTsLjko2U9M8aq0JtLWRjnz-0-0c11e74923cbfd23362d51f3c91962e2)
图10-12 BoxCAD界面
10.5.3 Physics Body Editor介绍
Physics Body Editor与PhysicsEditor相似,都是用Java实现的一个开源的编辑器,Java的东西都是跨平台的,但其只能导出JSON格式,虽然其界面看上去还不错,但目前还没有找到Cocos2d-x调用它的代码,如图10-13所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0166_0002.jpg?sign=1738849572-d3MwYw3JJq08YueWAyKnR9bFCdtPVt3z-0-7fdcd2063c4532cf8981b1698f728630)
图10-13 Physics Body Editor界面
10.5.4 Vertex Helper介绍
Vertex Helper也是一个编辑形状的工具,但该工具是编辑完形状直接生成代码,生成的代码可以直接放到2dx代码中(BoxCAD是需要修改一下的),相对于BoxCAD, Vertex Helper并不支持编辑关节,也不支持物理模拟,并且只能在Mac下运行。
使用的时候需要先将参考图片拖进工具中,然后选择编辑模式,旋转Type和Style选项,接下来在图片上挨个单击,右下角的文本框中就会自动生成相对应的初始化代码了,如图10-14所示。
![](https://epubservercos.yuewen.com/86446B/15367252104213206/epubprivate/OEBPS/Images/figure_0167_0001.jpg?sign=1738849572-M4J4cpBqKI9jf7xzMaQ9oA3YwkEBDon4-0-909a83c120643e8086a821832afe8e4e)
图10-14 Vertex Helper界面
除此之外还有Mekanimo、PhysicsBench等工具,这里就不一一介绍了。