本文介绍了某些实体在Libgdx box 2D中的碰撞失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用libgdx和box2d开发我的第一个游戏。我正在使用调试渲染器来测试我的对象。我创造了一些类似汽车的物体。每辆车都有一个主体,主体是一个6个点的大多边形(长约1米,高约0.7米),并有2个车轮通过转动关节连接。
主车上有一门大炮和一门机枪,也是通过旋转接头连接的。
我面临的问题是,汽车的大部分没有按预期发生碰撞。当两辆车相撞时,它们是重叠的,如下所示:
注意事项:
- 车轮和大炮(较小的形状)碰撞良好。当车轮接触时,车身停止
- 如果我通过代码检测到冲突,则冲突实际上正在发生
- 我尝试了一个较小的对象(机枪发射的子弹),并将该对象的"isBullet"属性设置为True,就像我在另一个帖子中看到的那样(not proper collision in box2d),但得到了相同的结果(该项目符号以红色圈出):
以下是我用来创建Body的代码:
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在处理凹多边形或顶点按顺时针顺序时有问题。试着用两个矩形来制造这些汽车,这样应该可以。
btw:您似乎使用的是较旧版本的libgdx。当前的libgdx夜总会在Polygon.set函数中有一个额外的算法,该算法以给定顶点的逆时针顺序自动计算凸壳。因此,使用该版本也可以解决您的问题。
这篇关于某些实体在Libgdx box 2D中的碰撞失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!