当物体被磁化时,Box2D出现抖动问题

3
所以我有一些物体(我可以在运行时创建更多),我需要它们被磁化到屏幕中心。让世界空间中的位置为(480/2 /WORLD_SCALE,320/2 / WORLD_SCALE)。我对box2d还很陌生,所以也许有一种简单的方法来实现这个,但我试图按以下方式做到:

  1. 从每个物体的位置和屏幕中心位置中减去-以获得移动物体所需方向。
  2. 标准化方向向量(在步骤1中找到的)
  3. 将此标准化矢量乘以重力功率值
  4. 将矢量(在p. 3中获得的)添加到当前物体的速度中

所以之后我得到了我想要的东西-物体确实被磁化到屏幕中心,我还添加了一些摩擦和阻尼,使物体能够停下来。但是,由于我的重力矢量长度恒定,因此我无法强制物体完全停止移动。它总是试图将自己移动到屏幕中心,并且最小可能的速度是重力矢量的长度。

如果我只有一个物体,当该物体靠近屏幕中心时,我不会执行步骤2、3。但是我不能将物体的位置绑定到磁场中心,因为两个物体永远不会占据完全相同的屏幕中间位置,因为它们会相互碰撞。因此我无法使我的重力矢量变量,并且玩弄任何摩擦力都行不通,也许一些步骤窍门可以帮助,但我认为我需要实现某种反弹的对抗力或类似的东西。

我对box2d还很陌生,对物理学也不是很擅长。

另外可能很重要的是我使用SetLinearVelocity方法设置物体速度。

也许我只是缺少什么,也许有一种用于box2d的本地方法来实现这一点。任何帮助都将不胜感激。

1个回答

2
通过改变世界比例尺解决了这个问题。 "当碰撞速度很小时,Box2D也会使用非弹性碰撞。 这是为了防止抖动。" http://www.box2d.org/manual.html 阅读这篇文章后,我发现应该使我的加速度向量足够小,以便Box2D使用这种非弹性碰撞,并以“本地”方式预防其抖动。 因此,将WORLD_SCALE增加4倍使得物体之间的距离和屏幕中心足够大。通过调整重力和摩擦力的新数值来实现。
祝好,伊戈尔

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接