我使用LibGDX制作2D游戏,玩家移动系统非常简单:

if (Gdx.input.isKeyPressed(Input.Keys.W))
       player.setPosition(player.getPosition().x, player.getPosition().y + 100 * delta);


与A,S和D键的原理相同。

但是现在,我有一个“醉酒模式”-因此,世界上有一个摄像机旋转,所以:

camera.rotate(MathUtils.random(-50, 50) * delta);


但是,如果在相机旋转时按W键,播放器将不会再向上直线移动。因此,如果旋转例如180°时,玩家直线向下移动,这实际上是合乎逻辑的。

那么,有一种方法可以使玩家始终移动,按W时向上移动,按D时向右移动,等等,无论当前旋转是什么?

先感谢您

最佳答案

尝试以相同方向使用播放器上的偏差。

final int PLAYER_SPEED = 100;
float angle = MathUtils.random(-50, 50) * delta; // btw, delta is Gdx.graphics.getDeltaTime()?
camera.rotate(angle);
if (Gdx.input.isKeyPressed(Input.Keys.W)) {
    float xOffset = PLAYER_SPEED * sin(toRadians(angle)) * delta;
    float yOffset = PLAYER_SPEED * cos(toRadians(angle)) * delta;
    player.setPosition(player.getPosition().x + xOffset, player.getPosition().y + yOffset);
}


对于其他方向,必须有其他三角公式。

10-05 21:15
查看更多