Slick2D用光标键平滑移动物体

时间:2012-10-20 11:32:07

标签: java slick2d

我正在玩Slick2D,当我尝试使用光标键移动一个简单的矩形时,我遇到了问题。

功能明智,代码有效。但是,如果你按下其中一个光标键,那么不时地看着屏幕上的运动会有一点点。

有人建议改进代码以使矩形移动顺畅吗?

以下是我使用的测试代码:

public class SlickGame extends BasicGame {
// ==================================================================================
// Fields
// ==================================================================================
private Rectangle mPlayer;

// ==================================================================================
// Constructor
// ==================================================================================
public SlickGame() {
    super("SlickGame");
}

// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void init(GameContainer pGameContainer) throws SlickException {
    // create the player centered on the screen
    mPlayer = new Rectangle(pGameContainer.getWidth()/2 - 20, pGameContainer.getHeight()/2 - 20, 40, 40);
}

@Override
public void update(GameContainer pGameContainer, int pDelta) throws SlickException {
    Input input = pGameContainer.getInput();
    int speed = 200;
    float distance = speed * ((float)pDelta/1000);

    if (input.isKeyDown(Input.KEY_LEFT)) {
        mPlayer.setX(mPlayer.getX() - distance);
    }
    if (input.isKeyDown(Input.KEY_RIGHT)) {
        mPlayer.setX(mPlayer.getX() + distance);
    }
    if (input.isKeyDown(Input.KEY_UP)) {
        mPlayer.setY(mPlayer.getY() - distance);
    }
    if (input.isKeyDown(Input.KEY_DOWN)) {
        mPlayer.setY(mPlayer.getY() + distance);
    }
}

@Override
public void render(GameContainer pGameContainer, Graphics pGraphics) throws SlickException {
    pGraphics.fill(mPlayer);
}

// ==================================================================================
// Methods
// ==================================================================================
public static void main(String[] args) {
     try {
         // create the game's container app
         AppGameContainer container = new AppGameContainer(new SlickGame());
         // adjust the resolution and disable fullscreen
         container.setDisplayMode(800, 600, false);
         // specify desired FPS
         container.setTargetFrameRate(60);
         // start the game
         container.start();
     }
     catch (SlickException e ) {
         e.printStackTrace();
     }
}
}

1 个答案:

答案 0 :(得分:0)

谢谢,naughty_hacker。添加container.setVSync(true);就可以了。