btRigidBody对象在低速碰撞时表现异常

时间:2012-10-10 09:29:20

标签: ios collision-detection game-physics bulletphysics

我正试图在我的iOS游戏中使用Bullet Physics。引擎似乎正确编译,因为演示工作正常。

在我的游戏中,我有玩家的船和一些敌舰。它们被定义为btRigidBody对象和btCollisionObjects,而我正在使用btSphereShapes进行冲突。

在“快速”速度下,碰撞似乎发生了明显的事情 - 事情发生碰撞,没有任何事情变得“奇怪”。如果速度非常慢,而且玩家的船只接触到一个非移动的物体,则发生碰撞,但随后玩家的船在接下来的几帧中以令人难以置信的速度移动并且距离碰撞的地方显得很远 - 完全不成比例它在撞击前的速度。

要移动周围的东西我每帧使用setLinearVelocity(),勾选物理引擎,然后使用getMotionState()更新我的渲染代码。

部分问题可能是我不太了解如何设置正确的质量或什么是最佳速度用于任何事情。我主要是坚持数字,看看会发生什么。

我是否应该以这种方式使用Bullet,是否有任何指导决定物体的质量? (我是假设在碰撞中较重的物体会迫使较轻的物体移动更多)

1 个答案:

答案 0 :(得分:0)

我在子弹中还不是专家,但我不会使用setLinearVelocity。这只是初始状态,一旦在世界上,如果你想在正确的方向上推动一些东西,给它一个冲动。这就像被不可见物体击中,因此与其他碰撞完全兼容。每帧设置速度将完全覆盖物理引擎计算。

我注意到当两个物体重叠时,它们会相对于它们重叠的力相互排斥。我认为你的setVelocity方法导致对象重叠,最后物理引擎以不合需要的方式解决了这个问题。

我正在制作太空船游戏,我会冲动取消当前的移动方向,加上冲动,只要船只没有按照我选择的最大速度移动,就会向新方向移动。