我在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等等,无论当前的旋转是什么?
提前谢谢
答案 0 :(得分:0)
尝试在同一方向上使用播放器上的偏差。
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);
}
对于其他方向,必须有其他三角公式。
答案 1 :(得分:0)
5tingr4y的解决方案对我有用。
所以,我刚刚创建了一个向量并将其向相反方向旋转。然后,我用那个Vector移动玩家。