3

我正在用 Java 做一个简单的游戏。我有一个名为“Drawer”的类,用于每 50 毫秒重新绘制我保存在 BufferedImages 数组中的图像。

我有一种方法可以在 Player 类中将播放器转换为巨大的播放器,代码是:

    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 或 Swing Timer。永远不要调用Thread.sleep(...)主 Swing 事件线程,称为事件调度线程或 EDT。在 Timer 的 ActionListener 中有一个 int count 变量,每次actionPerformed(...)调用时都会递增,如果 count > 到最大计数(这里是 5 * 2,因为你来回交换),则停止 Timer。

例如,

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 回答