Libgdx/Box2D 向 Body 应用推送?

Libgdx/Box2D Apply a Push to the Body?

我目前正在开发一个小地牢爬虫。我的"Knight"class应该有特殊能力吧。他应该能够向前推进并突破敌人。我目前正在为敌人和玩家使用 Box2D Bodys...知道如何给玩家 Body 一个方向的推动吗?

我已经测试过:

entityBody.applyLinearImpulse(100f, 0, entityBody.getWorldCenter().x,    entityBody.getWorldCenter().y, true);          

它有效,但问题是 body 被传送到那个方向而不是 "pushed forward"。他也不会在移动那么快时发生碰撞......有什么想法吗?

看看 Wiki 是怎么说的:https://github.com/libgdx/libgdx/wiki/box2d#impulsesforces

您可能对玩家移动示例部分感兴趣。他们向 body 施加左或右脉冲,具体取决于是否按下了哪个键,以及 body 是否未达到最大速度。

Vector2 vel = this.player.body.getLinearVelocity();
Vector2 pos = this.player.body.getPosition();

// apply left impulse, but only if max velocity is not reached yet
if (Gdx.input.isKeyPressed(Keys.A) && vel.x > -MAX_VELOCITY) {          
     this.player.body.applyLinearImpulse(-0.80f, 0, pos.x, pos.y, true);
}

// apply right impulse, but only if max velocity is not reached yet
if (Gdx.input.isKeyPressed(Keys.D) && vel.x < MAX_VELOCITY) {
     this.player.body.applyLinearImpulse(0.80f, 0, pos.x, pos.y, true);
}

针对body移动速度过快导致碰撞未发生的问题,您可能需要在body的BodyDef上设置bullet flag:

    bodyDef.bullet = true;

您还将 x 脉冲设置为 100,这基本上意味着将 x 速度设置为每秒 100 米……非常快(大约 224 mph)。如果需要的话,请随意 bash 以超级跑车的速度攻击敌人!