libGDX宠物小精灵风格运动(移动前转动)

时间:2017-01-29 19:29:06

标签: java libgdx

我正在使用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();
                }
            }
        }
    }

注意: 姿势包括IDLE,WALKING和RUNNING

路线包括上,下,左,右

基本上我希望玩家保持空闲状态并面向用户按下的方向然后如果仍然按住键则移动

1 个答案:

答案 0 :(得分:1)

您可以做的是检查播放器是否面向您按下的方向。如果他然后移动玩家,否则只需改变他的方向面对你按下的位置。

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

对其他箭头键也做同样的事情。