3

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

有时,它们最终会处于沿同一路径向上/向下或向左/向右移动的位置(垂直于墙壁的运动?)

有什么简单的方法可以检测到这一点,然后在任一方向上对其进行一点旋转?

任何具有 box2d 语言的伪代码或代码将不胜感激。

编辑:图片,应@Andrew 的要求

在此处输入图像描述

如果球继续像这样移动(左/右/左/右......),我想给它一点推力,让它从当前路径移动。

4

2 回答 2

1

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

  1. 在第一次 ball-wall碰撞之前。
  2. 第一次 ball-wall碰撞后。
  3. 第二次ball-wall碰撞后。

当您获得这三个速度时(使用GetLinearVelocity的函数b2Body) - 检查它们是否以一定的精度位于同一条线上(除符号外具有相同的方向)。如果满足此条件 - 应用一点旋转

于 2012-07-29T07:14:27.007 回答
0

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

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

于 2012-07-29T07:24:19.693 回答