碰到窗口边缘时的字符碰撞

时间:2013-05-29 03:31:05

标签: java slick2d

我的角色一旦碰到窗户边缘就停止了我的麻烦。 这是我的更新方法。

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;
        }

    }

我意识到要离开正在发生,因为我还没有编码但是角色在屏幕右侧出现

3 个答案:

答案 0 :(得分: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;
         }

答案 1 :(得分: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;
        }

答案 2 :(得分: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;
}

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