Libgdx / Box2D对身体施加推动力?

时间:2016-10-03 13:48:37

标签: java libgdx box2d game-physics

我正在开发一个小地牢爬行器。我的“骑士”课应该有一种特殊的能力。他应该能够向前推进并突破敌人。我目前正在使用Box2D Bodys为Enemys和玩家...任何想法如何让玩家身体向一个方向推进?

我已经测试过:

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

它有效,但问题是,身体被传送到那个方向而不是“向前推”。当快速移动时他也不会碰撞......有什么想法吗?

1 个答案:

答案 0 :(得分:0)

查看Wiki的内容:https://github.com/libgdx/libgdx/wiki/box2d#impulsesforces

您可能对播放器移动示例部分感兴趣。他们根据是否按下按键,以及身体是否达到最大速度,对身体施加左或右冲动。

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);
}

由于身体移动得太快而没有发生碰撞的问题,你可能需要在身体的BodyDef上设置子弹标志:

    bodyDef.bullet = true;

您还将x脉冲设置为100,这基本上意味着将x速度设置为每秒100米......相当快速(约224英里/小时)。如果需要的话,那就随意用超级跑车的速度来打击敌人吧!