Java 使用光标键平滑移动对象

Java 使用光标键平滑移动对象,java,slick2d,Java,Slick2d,我正在玩Slick2D,当我试图用光标键移动一个简单的矩形时遇到了一个问题 就功能而言,代码是有效的。然而,如果你一直按住其中一个光标键,不时会有一个小土塞在运动中温家宝看着屏幕 有人能建议改进代码以使矩形平滑移动吗 以下是我使用的测试代码: public class SlickGame extends BasicGame { // ==================================================================================

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

谢谢,淘气的黑客。添加
container.setVSync(true)
成功了。

尝试了一点之后,我注意到删除行容器。setTargetFrameRate(60);使情况有所改善。这样做对吗?还有其他想法吗?嗯,我不明白,这是一个问题,运动本身滞后还是图像看起来失真。如果问题是后者,则移除
container.setTargetFrameRate(60)本身并不能解决这个问题,但与
container.setVSync(true)一起解决它可以工作。