2

我目前正在使用 JME-Jbullet 物理引擎,并且遇到了地形问题。

我有 2 个扁平盒子,一个用于地板,一个用作坡道。问题如下:

使用以下代码:

Box slope = new Box("Slope", new Vector3f(0, -1, 0), 10f, 0f, 15f);
PhysicsNode pSlope = new PhysicsNode(slope, CollisionShape.ShapeTypes.MESH);
pSlope.setMass(0);
pSlope.getLocalRotation().fromAngleNormalAxis( 0.5f, new Vector3f( 0, 0, -1 ) );

在应用旋转之前,盒子正常工作,如果另一个物体掉在上面,那么它们会正确碰撞。然而,在旋转之后,盒子被旋转了,但它的“物理”并没有改变,所以当一个物体被放在看似斜坡的顶部时,它就好像旋转从未发生过一样。

有什么方法可以更新坡道,以便当一个物体落到它上面时,它会向下滑动?

谢谢。

4

3 回答 3

1

你还记得在你的update方法中更新物理世界吗?

public void update(float tpf) {
    super.update(tpf);
    pSpace.update(tpf);
}

从哪里来pSpace_PhysicsSpace pSpace=PhysicsSpace.getPhysicsSpace();

于 2010-03-14T22:34:11.930 回答
0

问题在于碰撞形状。网格是计算碰撞的极其昂贵的形状,据我所知,在 JME 中(还)不能正常工作。用盒子碰撞形状替换它将解决您的问题。

于 2010-07-24T20:36:01.720 回答
0

javadocs中所示:

getLocalTranslation().set() 不设置物理对象位置,使用 setLocalTranslation(),同样适用于 getLocalRotation()

我猜想你需要调用pSlope.setLocalRotation(...)而不是获取轮换并将其修改到位。

于 2011-12-07T17:06:30.637 回答