Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何在两行代码之间创建延迟?_Java - Fatal编程技术网

在Java中,如何在两行代码之间创建延迟?

在Java中,如何在两行代码之间创建延迟?,java,Java,我正在用java重新创建经典的街机游戏《太空入侵者》。我的问题是在杀死敌人后处理精灵时出现的。因为死亡精灵是一个敌人可以拥有的精灵之一,所以我基本上要做的是改变显示的精灵,然后移除敌人的物体。有没有办法让精灵显示一秒钟左右,然后移除敌人的物体?我也愿意用其他方法来做类似的事情,因为它可能没有我想象过的其他方法那么有效 编辑:我以前应该提到这个,但是任何涉及睡眠线程的事情都会导致整个游戏延迟,这是行不通的 // stuff detecting collision between missile a

我正在用java重新创建经典的街机游戏《太空入侵者》。我的问题是在杀死敌人后处理精灵时出现的。因为死亡精灵是一个敌人可以拥有的精灵之一,所以我基本上要做的是改变显示的精灵,然后移除敌人的物体。有没有办法让精灵显示一秒钟左右,然后移除敌人的物体?我也愿意用其他方法来做类似的事情,因为它可能没有我想象过的其他方法那么有效

编辑:我以前应该提到这个,但是任何涉及睡眠线程的事情都会导致整个游戏延迟,这是行不通的

// stuff detecting collision between missile and enemy
missiles.remove(0);
enemies.get(j).loadImage(2); // loads death sprite for enemy that got hit
// one second delay
enemies.remove(j);
编辑:我想出了解决问题的办法。使用swing Timer类,我能够在显示死亡精灵后创建延迟,然后移除敌人。在有类似问题的人需要时发布此信息

Timer timer = new Timer(600, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        enemies.remove(remove); // The enemy is removed when after the allotted delay occurs when timer.start() is called
    }
});

// final code after changes
missiles.remove(0);
enemies.get(j).loadImage(2);
remove = j;
timer.setRepeats(false); // makes it so that only one enemy is removed
timer.start(); // after the delay the enemy is removed, enough time for the death sprite to be shown for the allotted delay

Thread.sleep(1000)
应该可以帮您完成。

有多个选项:

线程类中的sleep()方法(catch InterruptedException):

java.util.concurrent包的TimeUnit枚举中的sleep()方法:

TimeUnit.SECONDS.sleep(1);
TimeUnit.MINUTES.sleep(1);

我已经试过了,但是效果不好,因为它会让整个游戏停止一秒钟。你用的是什么gui框架?你通常不能只在事件调度线程中添加睡眠。你有主游戏循环吗?如果您使用Swing,那么SwingWorker将单独处理UI线程。它不会挂起你的UI线程。虽然这是标题的正确答案,但它并不适用于UI应用程序,正如OPs文本所建议的那样。我明白了。我写这篇文章时没有指定…请不要将错误的答案标记为低质量。
TimeUnit.SECONDS.sleep(1);
TimeUnit.MINUTES.sleep(1);