2017-03-15 4 views
1

Ich mache ein 2D-Spiel in Libgdx und das Spieler Bewegungssystem ist ziemlich einfach:Wie verschiebt man einen Spieler in einer festen Richtung trotz Kameradrehung in LibGDX?

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

Und das gleiche Prinzip für die A, S und D-Taste.

Aber jetzt habe ich einen „betrunkenen Modus“ - daher gibt es eine Kamerarotation in der Welt, so einfach:

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

Aber wenn ich die W-Taste drücken, wenn die Kamera dreht, wird der Spieler bewegt sich nicht mehr gerade nach oben. Wenn die Drehung z.B. 180 ° bewegt sich der Spieler gerade nach unten, was eigentlich ziemlich logisch ist.

So gibt es einen Weg, dass der Spieler immer bewegt, nach oben, wenn W gedrückt wird, nach rechts, wenn D gedrückt wird etc. egal, was ist die aktuelle Rotation?

Vielen Dank im Voraus

+1

Verwenden Sie einen Vektor (in Ihrem Fall wäre das [0, 100] und drehen Sie ihn in die entgegengesetzte Richtung, dann bewegen Sie den Player um diesen Vektor – 5tingr4y

Antwort

0

Versuchen Sie, die Abweichung auf dem Player in der gleichen Richtung mit.

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

Für andere Richtungen muss es andere trigonometrische Formeln geben.

0

Die Lösung von 5tingr4y arbeitete für mich.

Also habe ich gerade einen Vektor erstellt und in die entgegengesetzte Richtung gedreht. Dann bewege ich den Player um diesen Vector.

Verwandte Themen