在Java游戏中使用计时器替换2个图像

时间:2012-09-15 13:35:08

标签: java image swing timer alternate

我正在用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循环)时显示最终图像。

任何想法?

2 个答案:

答案 0 :(得分:4)

如果这是一个Swing应用程序(你没说),请使用javax.swing.Timer或Swing Timer。永远不要在主Swing事件线程上调用Thread.sleep(...),称为事件调度线程或EDT。在Timer的ActionListener中有一个int count变量,每次调用actionPerformed(...)时都会递增,如果count> gt,则停止Timer。到最大计数(这里是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();
        }
     }
  });
}

答案 1 :(得分:0)