我正在 libGDX 中进行 Pokemon 重制,但我在移动方面遇到了一些问题,我可以让玩家像在游戏中一样在网格中移动,我对我所拥有的感到满意。但是,我想做到这一点,如果玩家面向左并且玩家点击右侧,则玩家将转向右侧而不向右移动,当前玩家无论如何都会向您按下的方向移动。
代码:
// 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();
}
}
}
}
注意: 姿势包括空闲、行走和运行
方向包括上、下、左、右
本质上,我希望玩家保持空闲并面向用户按下的方向,然后如果仍按住按键则移动
最佳答案
你可以做的是检查玩家是否面向你按下的方向。如果他随后移动玩家,否则只需将他的方向更改为面向您按下的位置即可。
if(Gdx.input.isKeyPressed(Input.Keys.UP) {
if(player.getDirection() == Direction.UP) {
if(timeout < 0) {
// move player
}
} else {
player.setDirection(Direction.UP);
//Set some timeout in seconds
timeout = 0.5;
}
}
//Considering that this method is being called in your update method then reduce the timeout.
timeout -= Gdx.graphics.getDeltaTime();
对其他箭头键也执行相同的操作。
关于java - libGDX 口袋妖怪式移动(移动前转身),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925021/