0
libGDXのポケモンリメイクに取り組んでいて、動きに問題があります。プレイヤーをゲームのようにグリッドに移動させることができます。私が持っています。しかし、もしプレイヤーが左を向いていて、プレイヤーが右にタップすると、右に移動せずに右に回すようにしたいのですが、現在プレイヤーは何を押しても方向を変えます。libGDXポケットモンスタースタイルムーブメント(移動前に回転)
コード:
// 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();
}
}
}
}
注: スタンスはIDLE、ウォーキングが含まれ、
道順UP、DOWN、LEFT、RIGHT
を含ん実行すると、基本的に私は、プレイヤーがIDLE滞在したいとユーザーが押した方向に向いているキーがまだ押されている場合は移動する。
私はこれを試しましたが、方向が設定されているためにまだプレイヤーが移動していて、そのキーはまだ移動しています。 –
@TylerFriesen elseステートメント内のこのコードに遅延を追加します。したがって、setDirectionが呼び出された場合、秒または半分を待機します。 – Squiddie
@TylerFriesenここでの問題は、更新メソッドが複数回呼び出されていることです。いずれかのキーを押すと、入力が記録され、プレーヤーの方向が設定され、キーがまだ停止している間に更新が再度呼び出され、プレイヤーが移動します。あなたはSquiddieが言ったことを試してみるべきです。彼の提案を追加するためにコードを更新しました。 –