在我的游戏中并没有真正落后那么多,但我知道通过减少Timer
的运行,我可以减少游戏中的大量延迟。该游戏有多个Timer
,因为它有一个Timer
更新所有内容,如玩家位置和所有障碍,然后我有其他Timer
我用来移除强力你可以得到。
例如,我有一个Timer
,它的初始延迟设置为5000,当它运行一次(它只运行一次)时,它将删除一个特定的电源,我有另一个{{将它的初始延迟设置为20 000.我如何保持每个计时器的不同延迟,但仍然只使用一次或至少比我现在使用的发烧?
无论如何,我可以使用Timer
或PriorityQueue
来完成此任务吗?如果是这样的话?
答案 0 :(得分:0)
如果你想再次运行相同的任务,你可以在schedule
上ScheduledThreadPoolExecutor
任务,然后重新安排它们以获得不同的延迟。
另一种选择是使用DelayQueue
来存储您要执行的任务,并使用单独的线程到take
并从队列中执行runnables。与ScheduledThreadPoolExecutor
一样,如果您希望它们再次运行,则必须将runnables重新放回队列,并再次运行。
ScheduledThreadPoolExecutor
允许您安排任务在固定延迟后连续运行,而DelayQueue
则要求您在运行后将任务重新放回队列。
答案 1 :(得分:0)
为什么会有一个“更新所有内容”的计时器?更新应始终执行不间断。 (除非你想把你的游戏限制在不变的FPS) 你真的应该考虑滥用“游戏循环”:
While Game Is Running
Update()
Draw()
End While
如果您不想在游戏中出现任何滞后,则需要考虑始终更新玩家位置等... 也就是说,当您更新位置等时......您需要确保相对于自上次执行Update()以来经过的时间来制作它们。
如果你不是经常调用Update(),那么无论你使用什么线程模式,你都会有滞后。