我正在使用libgdx和box2d制作我的第一款游戏。我正在使用调试渲染器测试我的对象。我创建了一些类似汽车的对象。每辆车都有一个主体,是一个由6个点组成的大型多边形(长约1米,高0.7米),并且有通过旋转连接的2个车轮。
主要部分的汽车还通过旋转连接具有炮和机枪。
我面临的问题是汽车的大部分没有按预期进行碰撞。当两辆车相撞时,它们会重叠在一起,就像这样:
汽车使用安装在车轮旋转接头上的电机向前行驶,其结构如下所示:
我正在使用1/60秒的世界步长,velocityIterations = 6和positionIterations = 2。你有什么想法我错过了什么吗?
主要部分的汽车还通过旋转连接具有炮和机枪。
我面临的问题是汽车的大部分没有按预期进行碰撞。当两辆车相撞时,它们会重叠在一起,就像这样:
一些注意事项:
- 车轮和加农炮(较小的形状)的碰撞正常。当车轮接触时,物体会停止。
- 如果我通过代码检测到碰撞,那么实际上发生了碰撞。
- 我尝试使用较小的对象(从机枪中发射的子弹),并像我在另一篇文章中看到的那样将对象的“isBullet”属性设置为true(not proper collision in box2d),但结果相同(子弹用红色圈出):
这是我用来创建正文的代码:
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。你有什么想法我错过了什么吗?