创建多边形的刚体

今天发现一个叫PhysicsEditor的东东,生成多边形的plist还真是方便。

不过也碰到几个很奇怪的问题,就是有时候生成的plist,里面的坐标居然是负数,然后加载到界面上的时候,sprite的位置和我设置的不一致,有时又是好的,这个很奇怪。

另一个问题,我搜了搜这个坛子,貌似没有这方面的玩意,难道你们都不做多边形的精灵或刚体的么?

最后一个问题,就是我是照着网上一个示例代码来写的,那个代码是基于cocos2d-x 3.0版本来做的,我的是3.4版本,发现3.4版本下没有…/Physics/chipmunk这个目录,我是从3.0版本的下面拷贝过去的,改了诸多引用的路径,不知道是 3.4版本把这些玩意集成了还是咋的,现在还不知道会不会出问题,先看看再说。

还有一个问题,刚体居然被轻易穿透,连点阻碍都没有……:6:

–好吧,这个问题解决了,原因是下面PEShapeCache_X3_0的代码中,有一句:body->setPositionOffset(bd->anchorPoint); ,这里的anchorPoint就是plist里面设置的0.5,0.5那个玩意,但是我没弄明白为什么作者在这里要做这个操作,于是乎呢,我就把它注释掉了,然后出来的效果就正常了:14:

PhysicsBody *PEShapeCache::getPhysicsBodyByName(const std::string name)
{
    BodyDef *bd = bodyDefs.at(name);
    CCASSERT(bd != nullptr, "Body not found");
    PhysicsBody *body = PhysicsBody::create(bd->mass, bd->momentum);
    //body->setPositionOffset(bd->anchorPoint);   //就是这个,我不知道PEShapeCache_X3_0这么做的目的是什么(哪位大神要是知道请告知)
    for (auto fd : bd->fixtures)
    {
        if (fd->fixtureType == SHAPE_CIRCLE)
        {
            auto shape = PhysicsShapeCircle::create(fd->radius, PhysicsMaterial(0.0f, fd->elasticity, fd->friction), fd->center);
            shape->setGroup(fd->group);
            //            shape->setCategoryBitmask(fd->collisionType);
            body->addShape(shape);
        }
        else if (fd->fixtureType == SHAPE_POLYGON)
        {
            for (auto polygon : fd->polygons)
            {
                auto shape = PhysicsShapePolygon::create(polygon->vertices, polygon->numVertices, PhysicsMaterial(0.0f, fd->elasticity, fd->friction), fd->center);
                shape->setGroup(fd->group);
                //                shape->setCategoryBitmask(fd->collisionType);
                body->addShape(shape);
            }
        }
    }
    return body;
}


```



这就是注释掉那句代码之后、并且在plist里面设置原点为(0.5,0.5)的时候的效果,创建的多边形刚体可以和sprite的图片完全契合。
  


这个是注释掉那句代码之前、并且在plist里面设置的原点为(0.5,0.5)的时候的效果,总是出现在左下角,无论sprite的位置怎么设置都不会改变



这个是注释掉那句代码之前、并且在plist里面设置的原点为(0,0)的时候的效果,虽然可以随sprite的位置变化,但是和sprite的图片不能契合
    


另外说一下,我用的版本是3.4,而PEShapeCache_X3_0的作者写这个时候,应该是针对3.0版本的,所以我用这个时候,我还把3.0版本Physics目录下的chipmunk文件夹和下面的类统统拷贝到我的classes下,有改了里面的一堆引用路径,然后才能用的。

3.4版本下有一个PhysicsBody::createPolygon也可以创建多边形刚体,但是我不知道是否有方法可以直接使用PhysicsEditor导出的plist文件,哪位大神要是知道,也请告知一下。

你好 你是用Physics2d 不是box2d吧…我也在想这个问题
你可以把这个项目的源代码(如果没有resource的话应该只要classes)发我吗? 651114907@qq.com
万分感谢!

不是box2d,那玩意我不会的说……

源代码你可以到github上去下,我也是照着这个来做的

https://github.com/baibai2013/PhysicsEditor-Loader-for-cocos2d-x-3.0