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(直到注册前还没遇到过这个限制,可能是用的还不深吧= =!) 导出完文件之后就是如果在项目中使用了,这里我们简介下Box2D下的使用,很简单,首先进入到这个目录“安装目录\PhysicsEditor\Examples\Cocos2d-X\Demo\Demo\generic-box2d-plist“,找到GB2ShapeCache-x.h和GB2ShapeCache-x.cpp 这2个文件,然后将他们加入到你的工程中。 接下来使用就是很简单的事情,直接贴代码最省事了,见下:(这里我使用的是Box2D) [cpp] // 将文件中的内容解析并载入到缓冲区中 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”)); [/cpp] 至此一个多边形就加载完毕了,可以去测试一下效果了。 另附上修改后的文件,由于WP限制,所以cpp改为txt后缀了,下完后改为cpp即可。 .h 文件: GB2ShapeCache-x .cpp 文件 : GB2ShapeCache-x
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!