【问题标题】:Box2D collision impact calculationBox2D 碰撞影响计算
【发布时间】:2013-10-13 07:43:04
【问题描述】:

我使用标准 Box2D ContactListener 来监听碰撞事件。我想要的是计算Bodies之间碰撞的影响强度。

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

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

有没有人可以向我解释如何解决这个问题,或者解释如何解释这些冲动?或者也许指向我使用 Box2D 并且还需要计算任何类型的损坏系统的影响的任何类型的开源游戏?

【问题讨论】:

    标签: box2d libgdx


    【解决方案1】:

    我认为您需要先定义您认为的“影响强度”,然后才能有人告诉您应该如何计算它。正如你所说,有很多方法可以解决这个问题。

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      “有时我得到高得离谱的值(比如 1E15 到 1E30),有时它们低得离谱(比如 -1E15 到 -1E30)。”

      根据方向,力将是正的或负的。对于极其刚硬的物体,即使是中等速度的碰撞也可能导致极高的力/加速度(绝对值)。例如,假设两个由钢制成的球体以 200 公里/小时的速度碰撞。

      【讨论】:

      • -1E15 到 -1E30 较低,与 1E-15 到 1E-30 相比不小。我也有非常小的值,但它们可能确实有效。我正在研究动态和静态身体之间的碰撞。这可能是奇怪数字的原因吗?
      • 嗯,根据方向,数字有正有负。
      猜你喜欢
      • 2013-03-14
      • 1970-01-01
      • 2010-10-30
      • 2012-06-10
      • 2013-02-02
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多