使用box2d时,速度是否有上限?

16
我正在使用Box2d进行物理模拟。每当按下箭头键时,我会对物体施加冲量以通过箭头键移动圆形。不幸的是,圆圈移动得非常缓慢,看起来并没有像真正的物理实体一样加速。
我的世界尺寸为400x800像素。圆形物体的半径为20f。
根据此(链接) ,问题可以通过在创建圆形时将其缩小并在绘制过程中获取物体位置后再扩大来解决。 然而看起来这并没有什么区别。我是否遗漏了一些步骤或设置? Pastebin上的代码

你能分享相关的代码吗?例如,构建主体等。 - Tom
@Tom 已添加了代码在 Pastebin 上的链接。我正在使用 box2d 和 libgdx 游戏引擎 - 所以代码是用 Java 编写的。 - ivymike
1
你是否真的在圆形上应用了冲量?ApplyLinearImpulse - Tom
@Tom 是的。在确定脉冲后,我会立即执行这个操作(已更新代码以反映这一点):fixture.getBody().applyLinearImpulse(impulse, fixture.getBody().getWorldCenter()); - ivymike
1
除了密度相当高之外,我在你所粘贴的内容中没有看到任何异常。你做了什么样的调试?你尝试过硬编码脉冲来应用,而不是依赖于按键等吗? - Tom
@Tom 是的。硬编码脉冲只是为了看看它是否有效。没有任何区别。我还尝试直接设置线性速度,施加力等。我知道这些调用有一定的效果,因为它们确实会移动物体,直到它达到某个速度。但是在那之后,它似乎根本不增加速度。 - ivymike
2个回答

31

我花了很长时间才明白,但实际上Box2D中确实有一个速度的硬限制。请参见这里

在源代码的b2Settings.h文件中,最大移动限制为每个时间步长2.0个单位。

如果您每帧进行一次步骤,以60FPS的速度运行,则物体的最大速度为120m/s。也许这将为某些人节省一些时间。


4
是的,使用不同尺寸会有所不同。Box2d基于浮点数运算,因此其精度受限,模拟质量也会有所差异。Box2d经过优化,最适合处理大小在0.1到10之间的动态物体。
因此,通常应该将物理单位和图形单位分开使用。
现在回答你的问题。一个物体的速度受到碰撞、摩擦(如果一个物体滑过另一个物体)以及线性阻尼的影响。所以要检查你使用的线性阻尼值(默认为非零,据我所知)。就我所知,没有速度限制,但是如果使用相同的时间步长,更高的速度将提供更低的碰撞质量。

1
不幸的是,将线性阻尼设置为零也没有帮助 :( - ivymike

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