我正在编写一个游戏,当一个图像与另一个图像改变位置时,我希望在200ms后删除第二个图像,我真的可以使用一些帮助。
我还是初学者,所有的帮助表示赞赏!回答好像你正在和一个五岁的孩子谈话!
public void setVisible(Boolean visible) {
ImageIcon ii = new ImageIcon(this.getClass().getResource(explode));
image = ii.getImage();
//this.visible = visible;
/*WITH THIS LINE OF CODE THE EXPLODE DOES NOT SHOW AT ALL,
I WANT TO MAKE SURE IT SHOWS BUT ONLY FOR 200MS*/
}
提前致谢!
答案 0 :(得分:1)
您可以使用预定的线程。您可以使用ScheduledExcecutorService
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
public void displayImageFor200Ms(){
ImageIcon ii = new ImageIcon(this.getClass().getResource(explode));
image = ii.getImage();
scheduler.schedule(new Runnable() {
public void run() {
// remove image now!
}
}, 200 , TimeUnit.MILLISECONDS);
}
不要忘记在不再需要它时关闭调度程序(您可以使用全局的池化调度程序来执行所有延迟操作,并在游戏结束时将其关闭)
答案 1 :(得分:0)
由于您不应该在EDT中执行这些时间阻止Thread.sleep(200)
的方法,因此这是另一个包含Timer
和TimerTask
类的解决方案:
public void setVisible(boolean visible) {
ImageIcon ii = new ImageIcon(this.getClass().getResource(explode));
// show / hide image
ii.setVisible(visible);
if (visible) { // only hide image, if it's previously set to visible
new Timer().schedule(new TimerTask() {
public void run() {
ii.setVisible(false);
}
}, 200); // hide it after 200 ms
}
}
感谢@AndrewThompson的建议!