设置图像延迟,然后将其删除

时间:2014-01-16 10:21:47

标签: java delay game-engine

我正在编写一个游戏,当一个图像与另一个图像改变位置时,我希望在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*/
}

提前致谢!

2 个答案:

答案 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)的方法,因此这是另一个包含TimerTimerTask类的解决方案:

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的建议!