1

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

1 回答 1

0

谢谢,naughty_hacker。添加container.setVSync(true);成功了。

于 2012-10-23T21:49:41.630 回答