0

一旦我的角色撞到窗户的边缘,我就很难让我的角色停下来。这是我的更新方法。

public void update(GameContainer gc, StateBasedGame sbg, int delta)
    {
        Input input = gc.getInput();
        playerX += VelocityX;

        gc.setShowFPS(Splash.showFps);

        if(input.isKeyPressed(Input.KEY_F1))
        {
            Splash.showFps = !Splash.showFps;
        }

        if (input.isKeyDown(Input.KEY_RIGHT))
            VelocityX = 10;
        else if (input.isKeyDown(Input.KEY_LEFT))
            VelocityX = -10;
        else if (playerX >= 700)
            VelocityX = 0;
        else
        {
            VelocityX = 0;
        }

    }

我意识到正在发生向左移动,因为我还没有编码,但是字符从屏幕右侧消失了

4

3 回答 3

1
 if (input.isKeyDown(Input.KEY_RIGHT)){
        VelocityX = 10;}
    else if (input.isKeyDown(Input.KEY_LEFT)){
        VelocityX = -10;}
    else{VelocityX = 0;}
    if (playerX >699){
        playerX=699;
        VelocityX = 0;}
    else if(playerX<1){
         playerX=1;VelocityX = 0;
         }
于 2013-05-29T03:36:46.897 回答
0

我注意到有几件事不对劲。首先是您的更新问题:您希望玩家按照他们的速度移动。您还需要进行边界检查。您遇到的另一个其他人没有注意到的问题是您有一个右键偏好,这意味着如果您同时按住左右键,玩家就会向右移动。这是由于 if / else if 语句。您应该将 ifs 分开以获得更细粒度的控制:

public void update(GameContainer gc, StateBasedGame sbg, int delta)
{
    Input input = gc.getInput();
    //playerX += VelocityX; -> this is moved

    gc.setShowFPS(Splash.showFps);

    if(input.isKeyPressed(Input.KEY_F1))
    {
        Splash.showFps = !Splash.showFps;
    }

    VelocityX = 0;
    if (input.isKeyDown(Input.KEY_RIGHT))
        VelocityX += 10;
    //removed the else
    if (input.isKeyDown(Input.KEY_LEFT))
        VelocityX -= 10;

    //you want to bounds check regardless of the above statments
    //get rid of the else
    if ((playerX >= 700 && VelocityX > 0) || (playerX <= 0 && VelocityX < 0)) //check both sides
        VelocityX = 0;

    //move the player
    playerX += VelocityX;
}

编辑:修改了我的代码以解决在边界时无法移动的问题。

于 2013-06-03T13:46:21.523 回答
0

问题已解决。在键检测中,您将速度设置为 0。

所以与其

if (input.isKeyDown(Input.KEY_RIGHT))
            VelocityX = 10;
        else if (playerX >= 700)
            VelocityX = 0;

做类似的事情

if (input.isKeyDown(Input.KEY_RIGHT))
        {
            VelocityX = 10;
            if (playerX >= 700)
                VelocityX = 0;
        }
于 2013-05-29T03:52:21.133 回答