Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在LibGDX中,如何在摄像机旋转的情况下沿固定方向移动播放器?_Java_Android_Camera_Libgdx - Fatal编程技术网

Java 在LibGDX中,如何在摄像机旋转的情况下沿固定方向移动播放器?

Java 在LibGDX中,如何在摄像机旋转的情况下沿固定方向移动播放器?,java,android,camera,libgdx,Java,Android,Camera,Libgdx,我用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) *

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

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

尝试使用播放器在同一方向上的偏差

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

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

5tingr4y的解对我有用


所以,我只是创建了一个向量,并将其向相反方向旋转。然后,我用这个向量移动播放器。

5tingr4y的解决方案对我有效

所以,我只是创建了一个向量,并将其向相反方向旋转。然后,我用这个向量移动播放器。

使用一个向量(在你的例子中是[0,100],并以相反的方向旋转,然后用这个向量移动播放器使用一个向量(在你的例子中是[0,100],并以相反的方向旋转),然后用这个向量移动播放器