Box2D碰撞影响计算

时间:2013-10-13 07:43:04

标签: box2d libgdx

我正在使用标准Box2D ContactListener来侦听碰撞事件。我想要的是计算身体之间碰撞影响的强度。

我已经阅读了许多关于人们如何计算它的不同描述。有些使用preSolve回调,有些则使用postSolve。有些使用Manifold,有些使用ContactImpulse。有些只取第一个点的normalImpulse + tangentImpulse,其他取所有点和其他点的总和,再取最大值。有些人完全忽略了切线的错误......

我无法理解这个问题。有时我只会在postSolve中获得冲动,而preSolve中的冲动总共为0。有时它是另一种方式。有时我会得到可笑的高值(例如1E15到1E30),有时候它们可笑得很低(比如-1E15到-1E30)。我甚至认为其中一个冲动是NaN(非数字)。

是否有人可以向我解释如何解决这个问题,并解释如何解释这些冲动?或者让我指出任何一种使用Box2D的开源游戏,还需要计算任何类型的伤害系统的影响?

2 个答案:

答案 0 :(得分:4)

我认为你需要在任何人告诉你如何计算它之前定义你认为是“影响力”的东西。正如你所说,有很多方法可以解决这个问题。

以下是我可能会提到的一些提示:

  • 只有postSolve会为所应用的冲动设置有效值
  • 每次碰撞都会发生许多preSolve / postSolve调用
  • 从身体A到身体B的正常冲动点
  • 可能只有一个冲动(NaN来自我猜的第二点?)

此页面包含更多详细信息:http://www.iforce2d.net/b2dtut/collision-anatomy

通常只是在接触开始后查看第一个postSolve中的脉冲值,因为这通常是最大的并代表初始命中。

另一种方法可能是跟踪总脉冲值,比如说最后0.5秒,如果超过某个阈值,则对象应该中断。这将让你处理两个物体已经接触的情况,第三个物体击中它们(例如,如果两个物体被堆叠,第三个物体从上面掉落,常识告诉我们底部的物体不应该逃脱因为没有被直接接触而损坏了。)

答案 1 :(得分:0)

“有时我会得到可笑的高价值(比如说1E15到1E30),有时它们的价格非常低(比如-1E15到-1E30)。”

根据方向,力量可以是正数也可以是负数。对于极端刚性的车身,即使是中等速度的碰撞也可能导致极高的力/加速度(绝对值)。想想两个由钢制成的球体,以200公里/小时的速度碰撞。