3

私はJavaで簡単なゲームをしています。BufferedImagesの配列に保存した画像を50ミリ秒ごとに再描画する「Drawer」という名前のクラスが1つあります。

プレーヤークラスの巨大なプレーヤーでプレーヤーを変換する方法があり、コードは次のとおりです。

    public void playerEvolution() {
    for (int i = 0; i < 5; i++) {
        this.setImageIndex(15);
        try {
            Thread.sleep(500);
            this.setImageIndex(17);
            Thread.sleep(500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    this.isHuge();
}

0.5秒ごとに2つの画像を交互に表示したいのですが、GamePanelでは画像が交互に表示されず、2.5秒(0.5 * 5ループ)を費やした場合にのみ最終画像が表示されます。

何か案は??

4

2 に答える 2

4

これがSwingアプリケーションである場合(あなたが言うことはありません)、javax.swing.TimerまたはSwingTimerを使用してください。Thread.sleep(...)イベントディスパッチスレッドまたはEDTと呼ばれるメインのSwingイベントスレッドを呼び出さないでください。タイマーのActionListenerにintcount変数があり、actionPerformed(...)呼び出されるたびにインクリメントされます。カウントが最大カウント(ここでは前後にスワップしているため5 * 2)になったら、タイマーを停止します。

例えば、

public void playerEvolution() {
  int delay = 500; // ms
  javax.swing.Timer timer = new javax.swing.Timer(delay , new ActionListener() {
     private int count = 0;
     private int maxCount = 5;

     @Override
     public void actionPerformed(ActionEvent evt) {
        if (count < maxCount * 2) {
           count++;
           // check if count is even to decide 
           // which image to use, and then
           // do your image swapping here
        } else {
           ((javax.swing.Timer)evt.getSource()).stop();
        }
     }
  });
}
于 2012-09-15T13:36:48.187 に答える
0

おそらくあなたはアニメーションを探しています。見るhttps://code.google.com/p/game-engine-for-java/source/browse/src/com/gej/graphics/Animation.java

于 2012-09-15T13:42:47.093 に答える