gpt4 book ai didi

当物体被磁化时 box2d 抖动

转载 作者:行者123 更新时间:2023-12-02 05:59:54 27 4
gpt4 key购买 nike

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

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

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

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

我是 box2d 的新手,不太擅长物理。

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

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

最佳答案

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

问候,伊戈尔

关于当物体被磁化时 box2d 抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7795255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com