检测“卡住”的尸体

时间:2012-07-26 14:54:27

标签: box2d

我在一个相互碰撞的世界中有几个球。世界各地都有静止的墙壁。

有时候,他们最终会继续沿着相同的路径向上/向下或向左/向右移动(垂直于墙壁的运动?)

有没有简单的方法来检测这个,然后在任一方向上对它施加一点旋转?

任何具有box2d语言的伪代码或代码都将受到赞赏。

编辑:图片,根据@Andrew的要求

enter image description here

如果球继续像这样移动(左/右/左/右......),我想稍微推动它,使其从当前路径移动。

2 个答案:

答案 0 :(得分:1)

我认为你可以创建你的b2ContactListener子类来检测ball-wall碰撞(这很简单并在Box2D manual中解释)。在您为每个球存储3个速度值之后。

  1. 在第一次ball-wall碰撞之前。
  2. 第一次ball-wall碰撞后。
  3. 第二次ball-wall碰撞后。
  4. 当你获得这三个速度时(使用GetLinearVelocity的{​​{1}}函数) - 检查它们是否有一定的精度位于同一条线上(除了符号之外有相同的方向)。如果满足此条件 - 应用一点旋转

答案 1 :(得分:0)

我以为你可以测量每次碰撞的角度?我现在没有时间发布正确的代码(今晚也许,如果你需要一个例子)但是你可以使用某种机制来检查球和墙之间任何碰撞的角度。

如果它正好是90度,则标记球(使用用户数据或在某些外部阵列中),并开始跟踪墙与该球之间连续90度碰撞的次数。如果两个90度的碰撞一个接一个地发生,你可以放心地假设球被卡住并轻轻推动。