【问题标题】:Increase body speed with applyLinearImpulse box2d使用 applyLinearImpulse box2d 提高身体速度
【发布时间】:2015-04-05 12:09:18
【问题描述】:

我试图让身体随着速度的增加而移动。起初它开始加速,但不久后达到恒定速度。如何让它保持加速?

我的代码如下所示:

 world = new World(new Vector2(0, 0), true);

    if (Gdx.input.isKeyPressed(Input.Keys.D))
        body.applyLinearImpulse(400f, 0, pos.x, pos.y, true);
    if (Gdx.input.isKeyPressed(Input.Keys.A))
        body.applyLinearImpulse(-400f, 0, pos.x, pos.y, true);
    if (Gdx.input.isKeyPressed(Input.Keys.W))
        body.applyLinearImpulse(0, 400f, pos.x, pos.y, true);
    if (Gdx.input.isKeyPressed(Input.Keys.S))
        body.applyLinearImpulse(0, -400f, pos.x, pos.y, true);

【问题讨论】:

  • 你的世界有多大?默认 Box2D 设置为 1 px = 1 m。这意味着如果您想在 720 p 屏幕上运行您的游戏(例如),您的世界将是 1280 米 x 720 米,一个 100 像素 x 100 像素的小对象的大小将是 100 米 x 100 米,即巨大的。 Box2D 只擅长处理“现实”的尺寸和速度。这意味着使用巨大的尺寸和速度会导致糟糕的模拟和/或您可以观察到的限制。
  • 解决方案很简单:创建一个小尺寸的视口,这样每个对象都会很小,box2d不会有问题。如果是您的问题,请查看my answer on this message
  • 所以?关于这个问题的任何更新?您尝试了我的解决方案还是 Springbua 的解决方案?那行得通吗?如果没有,你观察到什么?
  • 我通过将屏幕缩小到 100f 解决了这个问题,就像你说的 box2d 中的球很大。

标签: java libgdx box2d physics


【解决方案1】:

为了让Body随着时间的推移而加速,通常使用applyForce,而不是使用applyLinearImpulse来立即改变速度。
请记住,只要您想加速,就必须致电applyForce,而冲动通常只应用一次。
想想一辆起步车:车轮的旋转与摩擦力相结合,为整辆汽车增加了一个力,使其加速。
如果汽车随后获得了一定速度并撞到了一个箱子,则会对箱子施加一次脉冲,几乎立即增加它的速度。
因此,您可以尝试将applyLinearImpulse 调用更改为applyForce,并确保它在每个update 循环中被调用,只要您按下给定的键即可。

我建议你阅读Box2D tutorials on iforce2d.net

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多