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

我已经阅读了许多关于人们如何计算它的描述。一些使用preSolve回调,另一些使用postSolve。有些使用Manifold,有些使用ContactImpulse。有些只取第一个点的normalImpulse + tangentImpulse,另一些取所有点的总和,另一些取最大值。有些人完全忽略正切脉冲

我无法解决这个问题。有时我在postSolve中只得到冲动,而在preSolve中的冲动总计为0。有时情况恰恰相反。有时我得到高得离谱的值(例如1E15到1E30),有时它们却低得离谱(说-1E15到-1E30)。我什至认为其中一种冲动是NaN(不是数字)。

有谁可以向我解释如何解决这个问题,也许可以解释如何解释这些冲动?或者也许将我指向使用Box2D的任何一种开源游戏,并且还需要计算任何伤害系统的影响?

最佳答案

我认为您需要先定义自己认为的“影响力”,然后任何人都可以告诉您如何计算它。如您所说,有很多方法可以解决此问题。

我可能会提到一些提示:


只有postSolve才会对所施加的脉冲具有有效值
每次碰撞可能发生许多preSolve / postSolve调用
从身体A到身体B的正常冲动点
可能只有一个冲动(NaN是我猜测的第二点?)


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

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

另一种方法可能是在过去的0.5秒内跟踪总的脉冲值,如果超过某个阈值,则对象应该破裂。这样,您就可以处理以下情况:两个物体已经在接触,而第三个物体撞击了它们(例如,如果堆叠了两个物体而第三个物体从上方掉落,则常识告诉我们,底部的那个物体不应逃避只是因为未直接触摸而损坏)。

08-24 15:46