我正在使用libgdx和box2d进行我的第一场比赛。我正在使用调试渲染器来测试我的对象。我创造了一些类似物体的车。每辆车都有一个主体,这是一个6点(大约1米长,0.7米高)的大多边形,并有2个轮子通过旋转接头连接。
主车有一个加农炮和机枪,也通过旋转关节。
我面临的问题是汽车的大部分没有像预期的那样发生碰撞。当2辆汽车相互撞击时,它们会重叠,如下所示:
一些注意事项:
这是我用来创建实体的代码:
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
知道我在这里缺少什么吗?
答案 0 :(得分:6)
汽车的主体(多边形)是凹的。 Box2D有凹多边形或顶点顺时针方向有问题。 尝试使用两个矩形构建这些汽车,这应该可行。
顺便说一句:您似乎使用旧版本的libgdx。 当前的libgdx nightlies在polygon.set函数中有一个额外的算法,它以给定顶点的逆时针顺序自动计算凸包。 所以使用该版本也应该解决您的问题。