0

在我的应用程序中,当两个物体发生碰撞时,我必须根据它们的碰撞速度和碰撞容差来决定是否损坏一个物体。物体可以从任何方向碰撞。我对向量操作的了解很少。我不知道如何设置公差,然后比较它们的速度和公差。任何人都可以提供有关设置容差并进行比较的想法吗?

4

1 回答 1

1

最简单的方法是取它们的速度之间的差异,例如。

b2Vec2 velDiff = body1->GetLinearVelocity() - body2->GetLinearVelocity();
float collisionSpeed = velDiff.Length();

您可能还需要考虑相关物体的质量,因为较重的物体之间的碰撞会产生更多的能量。

对于像圆形或盒子这样的简单形状,这通常就足够了,尤其是当它们直接碰撞时。对于更长的薄形状,或者物体在远离质心的一点碰撞,或者它们显着旋转的地方,你可能会发现它是不准确的。

一种更准确的方法是检查 Box2D 计算出的将物体分开的碰撞反应脉冲的大小。您可以通过在碰撞回调中实现 PostSolve 函数并查看 normalImpulse 组件的大小来发现这一点。

于 2012-09-27T06:20:14.267 回答