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 以超级跑车的速度攻击敌人!
我目前正在开发一个小地牢爬虫。我的"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 以超级跑车的速度攻击敌人!