Java - 为循环流添加时间延迟

时间:2014-08-26 22:30:12

标签: java time delay cycle

我需要在循环流程之间添加时间延迟,如下所示:

    public boolean timeDelay(int seconds) {
        // 1000000000 ns = 1 s
        if (/* some system method to start calculate time in seconds*/ == seconds) {
            return true;
        } else {
            return false;
        }
    }

    public void renderEnemies() {
        for (int w = 0; w < wave.size(); w++) {
            while(timeDelay(2)){
                (wave.get(w)).render();
            }
        }
    }

也许我的想法不好,但我需要这样做...... wave - &gt;我游戏中敌人的ArrayList 在按下“NextWave”按钮后,渲染敌人处于游戏循环中,我需要在它们之间产生延迟,如a - &gt; 2s * 2s * 2s * 2s * 2s * *是敌人......

你能帮助我吗?

3 个答案:

答案 0 :(得分:2)

尝试:

Thread.sleep(1000);

并使用try-catch。

答案 1 :(得分:1)

您可能应该将其线程化并使用@curiosu提及的睡眠。

但是,如果您不想使用睡眠/多线程,但希望它是伪实时(不是基于回合),那么您需要在游戏顶部进行一个驱动循环,如下所示:

boolean keepPlaying = true;
while(keepPlaying) {
  doNpcStep()
  doPlayerStep()
  keepPlaying = !isGameOver()
}

这些步骤中的每一步都需要在非常小的时间片中运行,然后在doNpcStep函数中获取当前时间,从开始时间找到偏移量并运行现在应该发生的任何操作。

例如,你可以通过保持最小优先级队列来实现这一点,其中优先级等于它们应该执行的时间(自java epoch开始以来的ms)。然后从队列中取出所有小于或等于当前时间的元素并运行它们,并根据需要将新的事件放入队列。

本质上,这是一个运行播放器和npc线程的模拟,您可以在其中负责每个运行的时间。

答案 2 :(得分:0)

尝试使用无限循环

    while(1)
    {
      if(/*method to calc time*/ == seconds)
        return true;
    }
    return false;

我假设你想在''时间之后开始产生敌人,所以在'秒<之后总是应该返回' true ' / strong>'时间过去了。您的方法应该跟踪它开始计算秒数的时间。当按下“ NextWave ”按钮时,您可以调用该函数,其中变量可以以“秒”的倍数递增自身,以便您可以跟踪已用时间。

希望这有帮助。