box2d在身体被磁化时抖动

时间:2011-10-17 14:29:28

标签: box2d box2d-iphone

所以我有一些身体(我可以在运行时创建越来越多),我需要它们被磁化到屏幕中心。让它成为世界空间中的(480/2 / WORLD_SCALE,320/2 / WORLD_SCALE)。我是box2d的新手,所以也许有一种简单的方法可以达到这个目的,但我试着这样做:

  1. 我减去每个bodie的位置和屏幕中心位置 - 以获得我需要移动身体的方向。
  2. 规范化方向向量(我在第1页中找到)
  3. 将此标准化向量乘以我的重力值
  4. 将矢量(我在第3页中得到的)添加到当前车身的速度
  5. 所以在那之后我得到我想要的东西 - 身体磁化到屏幕中心,我还添加了一些摩擦和阻尼,以便身体可以停止。但是,正如我所假设的,因为我的引力矢量是恒定的长度 - 我不能强迫身体完全停止移动。它总是试图将自己移动到屏幕中心,并为它们提供尽可能小的速度 - 是这个重力矢量的长度。

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

    我是box2d的新手,对物理学不太了解。

    使用SetLinearVelocity方法设置物体速度可能也很重要。

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

1 个答案:

答案 0 :(得分:2)

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

问候,伊戈尔