如何在 Java 中的两行代码之间创建延迟? [复制]
Posted
技术标签:
【中文标题】如何在 Java 中的两行代码之间创建延迟? [复制]【英文标题】:How can I create a delay between two lines of code in Java? [duplicate] 【发布时间】:2020-10-15 15:08:49 【问题描述】:我正在用 java 重新创建经典的街机游戏 Space Invaders。我的问题是在杀死敌人后处理精灵时出现的。由于死亡精灵是敌人可以拥有的精灵之一,我基本上要做的是改变显示的精灵,然后移除敌人的对象。有没有办法让精灵显示大约一秒钟,然后移除敌人的物体?我也愿意接受其他方式来做这样的事情,因为它可能不如我没有想到的其他选项那么有效。
编辑:我之前应该提到过这一点,但是任何涉及休眠线程的事情都会导致整个游戏延迟,这是行不通的。
// 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);
编辑:我找到了解决问题的方法。使用摇摆计时器类,我能够在显示死亡精灵后创建延迟,然后将敌人移除。发布这个以防遇到类似问题的人需要它。
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
【问题讨论】:
我已经尝试过了,但效果不佳,因为它会停止整个游戏一秒钟。 你用的是什么 gui 框架?您通常不能只在 Event Dispatch Thread 中添加睡眠。 你有主游戏循环吗?你可以只记得在 N 循环迭代中移除敌人而不是阻塞 如果您使用的是 Swing,那么 SwingWorker 可以单独处理 UI 线程。它不会挂起你的 UI 线程。 【参考方案1】:有多种选择:
来自 Thread 类的 sleep() 方法(捕获 InterruptedException):
Thread.sleep(1000);
来自 java.util.concurrent 包的 TimeUnit 枚举的 sleep() 方法:
TimeUnit.SECONDS.sleep(1);
TimeUnit.MINUTES.sleep(1);
【讨论】:
【参考方案2】:Thread.sleep(1000);
应该为你做。
【讨论】:
虽然这是标题的合适答案,但它并不真正适用于 UI 应用程序,正如 OP 文本所建议的那样。 我明白了。我写这篇文章时没有指定... 请不要将错误答案标记为低质量。 See this Meta以上是关于如何在 Java 中的两行代码之间创建延迟? [复制]的主要内容,如果未能解决你的问题,请参考以下文章