Libgdx box2D中的碰撞失败了一些尸体

时间:2013-05-23 18:32:29

标签: box2d libgdx

我正在使用libgdx和box2d进行我的第一场比赛。我正在使用调试渲染器来测试我的对象。我创造了一些类似物体的车。每辆车都有一个主体,这是一个6点(大约1米长,0.7米高)的大多边形,并有2个轮子通过旋转接头连接。

主车有一个加农炮和机枪,也通过旋转关节。

我面临的问题是汽车的大部分没有像预期的那样发生碰撞。当2辆汽车相互撞击时,它们会重叠,如下所示:

Bodies colliding

一些注意事项:

  1. 车轮和大炮(较小的形状)碰撞很好。当车轮碰到车身停止时
  2. 如果我通过代码检测到碰撞,则实际发生碰撞
  3. 我用一个较小的物体(从机枪发射的子弹)尝试了这个,并且我将对象的“isBullet”属性设置为true,就像我在另一个帖子(not proper collision in box2d)中看到的那样,但是具有相同的结果(子弹用红色圈出):
  4. Bullet object colliding

    这是我用来创建实体的代码:

    protected Body createBody(Material material, Shape shape, BodyType type, WorldWrapper world)
    {
        BodyDef bodyDef = new BodyDef();
        bodyDef.type = type;
        bodyDef.position.set(initialPosition);
    
        Body body = world.createBody(bodyDef);
    
        FixtureDef fixtureDef = new FixtureDef();
        fixtureDef.density = this.material.getDensity();
        fixtureDef.friction = this.material.getFriction();
        fixtureDef.restitution = this.material.getRestitution();
        fixtureDef.shape = shape;
        body.createFixture(fixtureDef);
    
        return body;
    }
    

    汽车在车轮转动接头上使用电机向前推进,如下所示:

    public void goForward()
    {
        for (RevoluteJoint joint : wheelJoints)
        {
            joint.enableMotor(true);
            joint.setMotorSpeed(-this.engineSpeed);
            joint.setMaxMotorTorque(this.engineTorque);
        }
    }
    

    我正在使用以下值:

    Density = 2500;
    Restitution = 0;
    Friction = 0.1;
    BodyType = Dynamic;
    

    我正在使用1/60秒的世界步骤,velocityIterations = 6且positionIterations = 2

    知道我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:6)

汽车的主体(多边形)是凹的。 Box2D有凹多边形或顶点顺时针方向有问题。 尝试使用两个矩形构建这些汽车,这应该可行。

顺便说一句:您似乎使用旧版本的libgdx。 当前的libgdx nightlies在polygon.set函数中有一个额外的算法,它以给定顶点的逆时针顺序自动计算凸包。 所以使用该版本也应该解决您的问题。