3

所以我有一些身体(我可以在运行时创建越来越多的身体),我需要将它们磁化到屏幕中心。让它成为世界空间中的 (480/2 / WORLD_SCALE, 320/2 / WORLD_SCALE)。我是 box2d 的新手,所以也许有一种简单的方法可以实现这一点,但我正在尝试按以下方式进行操作:

  1. 我减去每个身体的位置和屏幕中心位置 - 以获得我需要将身体移动到的方向。
  2. 归一化方向向量(我在第 1 页找到)
  3. 将此归一化向量乘以我的重力功率值
  4. 将向量(我在第 3 页中得到的)添加到当前身体的速度

所以在那之后我得到了我想要的——物体确实会磁化到屏幕中心,我还添加了一些摩擦和阻尼,这样物体就可以停止。但是,正如我所假设的,由于我的重力矢量是恒定的长度 - 我不能强迫身体完全停止移动。它总是试图将自己移动到屏幕中心,并且它们的最小速度是这个重力矢量的长度。

如果我只有一个身体,当身体更靠近屏幕中心时,我不会执行步骤 2,3,那么重力大小是。但是我不能将身体的位置绑定到磁场中心,因为这两个身体永远不会占据屏幕中间的确切位置,因为它们会相互碰撞。所以我不能让我的重力矢量可变,并且玩弄任何摩擦都不能解决问题,也许一些步骤黑客可能会有所帮助,但我认为我需要的是实现某种弹跳反作用力或类似的东西。

我是box2d的新手,对物理不是很好。

同样重要的是我使用 SetLinearVelocity 方法设置了身体速度。

也许我只是错过了一些东西,也许 box2d 有一些原生的方法来实现这一点。任何帮助表示赞赏。

4

1 回答 1

2

通过改变世界规模确实解决了这个问题。“当碰撞速度较小时,Box2D 也会使用非弹性碰撞。这样做是为了防止抖动。” http://www.box2d.org/manual.html 阅读后我发现我应该让我的加速度矢量足够小,以便 box2d 使用这种非弹性碰撞并防止其以“本机”方式抖动。所以将 WORLD_SCALE 增加 4 倍使得物体和屏幕中心之间的距离足够大。玩弄引力和摩擦力的新数字就可以了。

问候,伊戈尔

于 2011-10-18T07:21:05.240 回答