Ich arbeite an einem Pokemon Remake in libGDX und ich habe einige Probleme mit der Bewegung, ich kann den Spieler in ein Raster bewegen lassen, genau wie in den Spielen und ich bin glücklich mit was Ich habe. Allerdings möchte ich es so machen, dass wenn der Spieler nach links zeigt und der Spieler nach rechts tippt, der Spieler nach rechts dreht, ohne nach rechts zu gehen, bewegt sich der Spieler momentan in die Richtung, in die Sie drücken, egal was geschieht.libGDX Pokemon Style Movement (Drehen vor dem Bewegen)
Code:
// Detects if the player is sprinting
if (Gdx.input.isKeyPressed(Input.Keys.A)) {
speed = 2;
} else {
speed = 1;
}
// Moves the player
if (isMoving) {
// Sets the player animation
if (speed == 1)
player.setStance(Stance.WALKING);
else if (speed == 2)
player.setStance(Stance.RUNNING);
if (player.getSprite().getX() < targetX) {
player.getSprite().translateX(speed);
}
if (player.getSprite().getX() > targetX) {
player.getSprite().translateX(-speed);
}
if (player.getSprite().getY() < targetY) {
player.getSprite().translateY(speed);
}
if (player.getSprite().getY() > targetY) {
player.getSprite().translateY(-speed);
}
if (Math.abs(player.getSprite().getX() - targetX) <= 1 && Math.abs(player.getSprite().getY() - targetY) <= 1) {
player.getSprite().setPosition(targetX, targetY);
isMoving = false;
}
} else {
player.setStance(Stance.IDLE);
}
if (!lockMovement) {
if (Gdx.input.isKeyPressed(Input.Keys.UP)) {
if (!isMoving) {
player.setDirection(Direction.UP);
if (cellAvailable(player.getSprite().getX() + 8, player.getSprite().getY() + 24)) {
isMoving = true;
targetY = player.getSprite().getY() + 16;
targetX = player.getSprite().getX();
}
}
}
if (Gdx.input.isKeyPressed(Input.Keys.DOWN)) {
if (!isMoving) {
player.setDirection(Direction.DOWN);
if (cellAvailable(player.getSprite().getX() + 8, player.getSprite().getY() - 8)) {
isMoving = true;
targetY = player.getSprite().getY() - 16;
targetX = player.getSprite().getX();
}
}
}
if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {
if (!isMoving) {
player.setDirection(Direction.LEFT);
if (cellAvailable(player.getSprite().getX() - 8, player.getSprite().getY() + 8)) {
isMoving = true;
targetX = player.getSprite().getX() - 16;
targetY = player.getSprite().getY();
}
}
}
if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {
if (!isMoving) {
player.setDirection(Direction.RIGHT);
if (cellAvailable(player.getSprite().getX() + 24, player.getSprite().getY() + 8)) {
isMoving = true;
targetX = player.getSprite().getX() + 16;
targetY = player.getSprite().getY();
}
}
}
}
Hinweis: Stances umfassen IDLE, Gehen und RUNNING
Wegbeschreibung UP umfassen, AB, LINKS, RECHTS
Grunde möchte ich die Spieler IDLE bleiben und in die Richtung blicken, in die der Benutzer drückt DANN bewegen, wenn der Schlüssel noch gedrückt wird
Ich habe das versucht, und der Spieler bewegt sich immer noch, weil die Richtung festgelegt wird, und der Schlüssel wird immer noch den nächsten Rahmen gehalten, so dass der Spieler –
@TylerFriesen eine Verzögerung zu diesem Code innerhalb der Else-Anweisung hinzufügen. Wenn also die setDirection aufgerufen wird, wartet sie eine zweite oder halbe Sekunde. – Squiddie
@TylerFriesen Das Problem hier ist, dass Ihre Update-Methode mehrere Male in einer Sekunde aufgerufen wird. Wenn Sie eine beliebige Taste drücken, zeichnet sie die Eingabe auf, stellt die Richtung des Spielers ein und sofort wird Ihr Update erneut aufgerufen, während der Schlüssel noch nicht gedrückt ist, so dass Ihr Player bewegt wird. Sie sollten versuchen, was Squiddie gesagt hat. Ich habe meinen Code aktualisiert, um seinen Vorschlag hinzuzufügen. –