cocos2d-x中搭配Box2D使用PhysicsEditor

最近开始使用cocos2dx里的物理引擎,多边形是必不可少的,如果是自己手写顶点的话就太……了。所幸的是已经有人做了一款支持导入的软件,它就是PhysicisEditor(下载地址)(除了Box2D外,也支持chipmunk等多款引擎),而且Example中自带cocos2dx的解析CPP(已经过时,不过我已经修改了下,使其支持最新的cocos2dx 3.0 alpha1,打算跟作者沟通下,让其更新出去),这款软件虽然不是免费的,但是可以通过向作者发申请来获得授权(鄙人就是这么得到的,呵呵)。

申请license网址:http://www.codeandweb.com/request-free-license 

好了,废话不多说,简介下这款软件,界面如下图:

无标题

使用起来也挺简单的,就是描绘你需要的多边形的边缘,然后设置下它的AnchorPoint,还有一些物理属性,然后选择你需要发布的引擎类型文件,这里我们选Box2D,然后点publish,就可以导出到你的目录底下了。

PS:如果是未注册版的,每次导出都会延迟几秒,虽然不妨碍使用,还是有些许不爽的,并且无法自定义导出路径,每次都要选择,并且提示说最多只能支持10个shape(直到注册前还没遇到过这个限制,可能是用的还不深吧= =!)

无标题1

导出完文件之后就是如果在项目中使用了,这里我们简介下Box2D下的使用,很简单,首先进入到这个目录“安装目录\PhysicsEditor\Examples\Cocos2d-X\Demo\Demo\generic-box2d-plist“,找到GB2ShapeCache-x.h和GB2ShapeCache-x.cpp 这2个文件,然后将他们加入到你的工程中。

接下来使用就是很简单的事情,直接贴代码最省事了,见下:(这里我使用的是Box2D)


// 将文件中的内容解析并载入到缓冲区中
GB2ShapeCache::sharedGB2ShapeCache()->addShapesWithFile("map-box2d.plist");

// 创建一个刚体
b2BodyDef bodyDef;
bodyDef.type = b2_staticBody;
Point position = spriteMap->getPosition(); // 这个spriteMap是我们创建好的精灵
bodyDef.position.Set(position.x / PTM_RATIO, position.y / PTM_RATIO);
bodyDef.userData = spriteMap;
b2Body* body_b2 = pBox2DWorld->CreateBody(&bodyDef); //这里是之前创建好的world

// 从缓冲区中找到数据,并将其设置进去
GB2ShapeCache* sc = GB2ShapeCache::sharedGB2ShapeCache();
sc->addFixturesToBody(body_b2, "map"); // 这个map是里头图片的名字,我用的是map.png

// 将精灵的锚点与刚体保持一致
spriteMap->setAnchorPoint(sc->anchorPointForShape("map")); 

至此一个多边形就加载完毕了,可以去测试一下效果了。

另附上修改后的文件,由于WP限制,所以cpp改为txt后缀了,下完后改为cpp即可。

.h 文件: GB2ShapeCache-x

.cpp 文件 : GB2ShapeCache-x

发表评论

电子邮件地址不会被公开。