我使用标准的 Box2DContactListener来监听碰撞事件。我想要的是计算身体之间碰撞的影响强度。
我已经阅读了许多关于人们如何计算它的不同描述。有些使用preSolve回调,有些使用postSolve. 有些使用Manifold,有些使用ContactImpulse。有些只取第一个点的 normalImpulse+tangentImpulse,有些取所有点的总和,有些取最大值。有些人完全忽略了 tangentImpulses...
我无法解决这个问题。有时我只得到脉冲,postSolve而脉冲preSolve总数为 0。有时情况正好相反。有时我会得到高得离谱的值(比如 1E15 到 1E30),有时它们会低得离谱(比如 -1E15 到 -1E30)。我什至认为其中一种冲动是NaN(不是数字)。
有没有人可以向我解释如何解决这个问题,也许可以解释如何解释这些冲动?或者也许可以指出我使用 Box2D 的任何类型的开源游戏,还需要计算任何类型的损坏系统的影响?
我认为您需要先定义您认为的“影响强度”,然后才能告诉您应该如何计算它。正如你所说,有很多方法可以解决这个问题。
以下是我可能会提到的一些提示:
此页面有更多详细信息:http : //www.iforce2d.net/b2dtut/collision-anatomy
通常只查看接触开始后第一个 postSolve 中的脉冲值,因为这通常是最大的并且代表初始命中。
另一种方法可能是跟踪总脉冲值,比如过去 0.5 秒,如果超过某个阈值,则对象应该破裂。这将让你处理两个物体已经接触的情况,第三个物体击中它们(例如,如果两个物体堆叠在一起,第三个物体从上面掉下来,常识告诉我们,底部的那个不应该逃脱损坏只是因为它没有直接接触)。