【问题标题】:libGDX Pokemon Style Movement (Turning before Moving)libGDX 口袋妖怪风格运动(移动前转动)
【发布时间】:2017-01-29 19:29:06
【问题描述】:

我正在 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

方向包括上、下、左、右

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

【问题讨论】:

    标签: java libgdx


    【解决方案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();
    

    对其他箭头键也执行相同操作。

    【讨论】:

    • 我已经尝试过了,由于方向已设置,玩家仍会移动,并且下一帧仍按住键以便玩家移动
    • @TylerFriesen 这里的问题是您的更新方法在一秒钟内被多次调用。当您按下任何键时,它会记录输入,设置玩家方向,并在您的键仍然按下时立即再次调用您的更新,以便移动您的玩家。你应该试试 Squiddie 说的。我更新了我的代码以添加他的建议。
    • @Squiddie 请验证我是否正确采纳了您的建议。很久没有使用 LibGDX 了,所以我不确定我是否做得对。
    • 超时工作完美,谢谢,只需将延迟更改为更小,这样您就不必等待很长时间才能改变方向
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2021-11-07
    • 2021-01-19
    相关资源
    最近更新 更多