我需要在循环流程之间添加时间延迟,如下所示:
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 * *是敌人......
你能帮助我吗?
答案 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 ”按钮时,您可以调用该函数,其中变量可以以“秒”的倍数递增自身,以便您可以跟踪已用时间。
希望这有帮助。