Java 如何在JBox2D中创建复合凸多边形实体?

Java 如何在JBox2D中创建复合凸多边形实体?,java,box2d,jbox2d,Java,Box2d,Jbox2d,我试图通过组合凸多边形在JBox2D中创建一个凹多边形体。这就是我尝试过的: Vec2[][] v = { { new Vec2(-3.5f, 0), new Vec2(-3.5f, 0.5f), new Vec2(3.5f, 0.5f), new Vec2(3.5f, 0) }, { new Vec2(-3.5f, 0.5f), new Vec2(-3.5f, 3), new Vec2(-3, 3), new Vec2(-3, 0.5f) }, { new Ve

我试图通过组合凸多边形在JBox2D中创建一个凹多边形体。这就是我尝试过的:

Vec2[][] v = { { new Vec2(-3.5f, 0), new Vec2(-3.5f, 0.5f), new Vec2(3.5f, 0.5f), new Vec2(3.5f, 0) },
        { new Vec2(-3.5f, 0.5f), new Vec2(-3.5f, 3), new Vec2(-3, 3), new Vec2(-3, 0.5f) },
        { new Vec2(3.5f, 0.5f), new Vec2(3.5f, 3), new Vec2(3, 3), new Vec2(3, 0.5f) } };

BodyDef bodyDef = new BodyDef();
bodyDef.position.set(x, y);
bodyDef.type = BodyType.DYNAMIC;
Body body = WORLD.createBody(bodyDef);

for (int i = 0; i < v.length; i++) {
    PolygonShape polygonShape = new PolygonShape();
    polygonShape.set(v[i], v[i].length);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.density = 0.1f;
    fixtureDef.shape = polygonShape;
    body.createFixture(fixtureDef);
}
这是正确的,只是它还为每个装置在(0.0,0.0)处生成四个额外顶点。这会导致多边形变为凹面,这是不好的。 我很自然地开始测试,发现这个形状工作得很好,没有产生额外的顶点:

float sqrt2 = (float) Math.sqrt(2);
Vec2[][] v = { { new Vec2(2, 0), new Vec2(sqrt2, sqrt2), new Vec2(0, 2), new Vec2(-sqrt2, sqrt2),
        new Vec2(-2, 0), new Vec2(-sqrt2, -sqrt2), new Vec2(0, -2), new Vec2(sqrt2, -sqrt2) } };
所以我认为这与拥有多个装置有关,但后来我发现这不起作用(在0,0处产生这四个额外的顶点):

这又让我困惑了!如果这些额外的四个顶点不出现,那么一切都会正常工作,那么我做错了什么

我对Box2D有些陌生,所以请记住这一点

3.5  0.5
3.5  3.0
3.0  3.0
3.0  0.5
0.0  0.0
0.0  0.0
0.0  0.0
0.0  0.0

-3.5  0.5
-3.5  3.0
-3.0  3.0
-3.0  0.5
0.0  0.0
0.0  0.0
0.0  0.0
0.0  0.0

-3.5  0.0
-3.5  0.5
3.5  0.5
3.5  0.0
0.0  0.0
0.0  0.0
0.0  0.0
0.0  0.0
float sqrt2 = (float) Math.sqrt(2);
Vec2[][] v = { { new Vec2(2, 0), new Vec2(sqrt2, sqrt2), new Vec2(0, 2), new Vec2(-sqrt2, sqrt2),
        new Vec2(-2, 0), new Vec2(-sqrt2, -sqrt2), new Vec2(0, -2), new Vec2(sqrt2, -sqrt2) } };
Vec2[][] v = { { new Vec2(2, 2), new Vec2(2, -2), new Vec2(-2, -2), new Vec2(-2, 2) } };