我正在使用 libgdx 和 box2d 开发我的第一个游戏。我正在使用调试渲染器来测试我的对象。我创建了一些类似汽车的物体。每辆车都有一个主体,它是一个6点的大多边形(长约1米,高0.7米),并有2个通过旋转关节连接的车轮。
主车还通过旋转接头连接了一门大炮和一挺机枪。
我面临的问题是汽车的大部分没有按预期发生碰撞。当两辆车相撞时,它们是重叠的,如下所示:
一些注意事项:
- 轮子和大炮(较小的形状)碰撞良好。当轮子接触到车身时就会停止
- 如果我通过代码检测到碰撞,则碰撞实际上正在发生
- 我用一个较小的对象(从机枪发射的子弹)尝试了这个,然后我将对象的“isBullet”属性设置为 true,正如我在另一篇文章中看到的那样(box2d 中的碰撞不正确 https://stackoverflow.com/questions/16458178/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 秒世界步长,速度迭代 = 6 且位置迭代 = 2
知道我在这里缺少什么吗?
汽车的主体(多边形)是凹形的。
Box2D 在处理凹多边形或顶点按顺时针顺序排列时会遇到问题。
尝试用两个矩形来建造那些汽车,这应该可行。
顺便说一句:您似乎使用旧版本的 libgdx。
当前的libgdx nightlies在polygon.set函数中有一个额外的算法,它自动按给定顶点的逆时针顺序计算凸包。
因此,使用该版本也应该可以解决您的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)