1

它在我的游戏中并没有真正滞后,但我知道我可以通过减少Timer' 的运行来减少游戏中的很多滞后。该游戏有多个Timer's,因为它有一个Timer可以更新所有内容,例如玩家位置和所有障碍物,然后我还有其他Timer's 用于删除您可以获得的能量提升。

例如,我有一个Timer将其初始延迟设置为 5000,当它运行一次(它只会运行一次)时,它将移除特定的电源,而我有另一个Timer将其初始延迟设置为 20 000。我将如何保持每个计时器的不同延迟,但仍然只使用一个或至少比我现在使用的发烧?

无论如何我可以使用PriorityQueueScheduledThreadPoolExecutor完成此操作吗?如果是这样怎么办?

4

2 回答 2

0

如果您想再次运行相同的任务,您将schedule在 上执行任务ScheduledThreadPoolExecutor,然后将它们重新安排为不同的延迟。

另一种选择是使用 aDelayQueue来存储您要执行的任务,并使用单独的线程来take执行队列中的可运行文件。与ScheduledThreadPoolExecutor您一样,如果您希望它们再次运行,您必须将可运行对象重新放入队列中并有新的延迟。

ScheduledThreadPoolExecutor允许您安排任务在固定延迟后连续运行,而要求您在任务运行后DelayQueue继续将任务放回队列中。

于 2013-05-18T20:21:19.897 回答
0

为什么会有一个“更新一切”的计时器?更新应始终不间断地执行。(除非您想将游戏限制为恒定的 FPS)
您确实应该考虑滥用“游戏循环”:

While Game Is Running
    Update() 
    Draw() 
End While

如果您不希望游戏中出现任何延迟,则需要考虑始终更新玩家位置等...也就是说,当您更新位置等时...您需要确保它们相对于经过的时间自上次执行 Update() 以来。

如果您不经常调用 Update(),那么无论您使用哪种线程模式,都会出现延迟。

于 2013-05-18T20:49:48.113 回答