【问题标题】:cocos2d-x]In box2d, didn't make polygon with vertex correctlycocos2d-x]在box2d中,没有正确地用顶点制作多边形
【发布时间】:2018-10-19 05:51:11
【问题描述】:
        {
            b2BodyDef bodyDef;
            bodyDef.type = b2_staticBody;
            bodyDef.position.Set(location.x / PTM_RATIO, location.y / PTM_RATIO);
            bodyDef.userData = pSprite;
            //bodyDef.userData = nullptr;

            b2Body* body = _world->CreateBody(&bodyDef);
            body->SetLinearVelocity(b2Vec2(1, 0));

            b2PolygonShape poly;

            b2Vec2 vertices[7];
            vertices[0].Set(0, 0);
            vertices[1].Set(1, 0);
            vertices[2].Set(1, 1);
            vertices[3].Set(0.75f, 1);
            vertices[4].Set(0.5f, 1.5f);
            vertices[5].Set(0.25f, 1);
            vertices[6].Set(0, 1);
            poly.Set(vertices, 7);

            b2FixtureDef fixtureDef;

            fixtureDef.shape = &poly;
            fixtureDef.density = 1.0f;
            fixtureDef.friction = 0.5f;
            fixtureDef.restitution = 0.0f;
            body->CreateFixture(&fixtureDef);
        }

我用顶点值制作box2d的身体。

在代码中我的顶点的形状就像上图。

(使用的是b2ChainShape,所以inner是空的)

但做体型就是这样。

为什么会出现这些差异?

我不能解决这个问题吗?

【问题讨论】:

    标签: c++ cocos2d-x box2d


    【解决方案1】:

    b2PolygonShape不能用于concave polygons;它仅适用于convex polygons。

    b2PolygonShape 的实现使用convex hull 计算算法,该算法会将点集从您想要的(如您的第一张图片所示)变为您得到的(如您的第二张图片所示)。

    这被列为common mistake:使用b2Polygon 创建凹多边形。

    您可以使用您引用的b2ChainShape。

    如果内部区域是空的不是你想要的,你可以使用一组凸多边形来构建你的凹形。

    只需两个凸多边形即可创建您展示的第一个形状。这些凸多边形之一是三角形,另一个是矩形(或正方形)。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2015-03-26
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多