如何在 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 中的两行代码之间创建延迟? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何合并数据框熊猫中的两行

MySQL SELECT 语句的两行之间的区别

从表的两行到视图中的值总和[重复]

如何在 SQL 查询中的两行上写属性名称

在 SQL 中排序时如何比较同一表中的两行?

用C语言怎么把文件中的两行合并成一行