我正在用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循环)时显示最终图像。
任何想法?
答案 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)