1

私は Slick2D をいじっていますが、カーソル キーで単純な四角形を移動しようとすると問題が発生します。

機能的には、コードは機能します。ただし、カーソルキーの 1 つを押したままにすると、画面を見ているときの動きに少しヒックアップが発生することがあります。

長方形をスムーズに動かすためのコードの改善を提案できる人はいますか?

使用したテストコードは次のとおりです。

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 に答える