我目前正在阅读有关游戏开发的内容,每当我看到游戏循环实施时,它总是以同样的方式。
一段时间(真实)阻止,内部为FPS睡眠。
我问自己,为什么我不能使用预定的执行者,这似乎是明显的选择? 我的意思是,我确定我在这里错了,我不太可能是第一个想到这个,但为什么不呢?
答案 0 :(得分:0)
首先,看一下传统游戏循环的一些演变。你的while(true)+ sleep示例是最简单的。
然后人们注意到游戏受到他们运行的计算机速度的影响。查找"可变时间步游戏循环"在谷歌上,举例说明如何处理。
现在阅读ScheduledExecutorService上的文档。 scheduleAtFixedRate和scheduleWithFixedDelay都不是你想要的游戏。
此外,向下滚动文档,您会注意到"If any execution of the task encounters an exception, subsequent executions are suppressed."如果您不处理所有可能的异常,这可能会导致您的游戏循环突然终止。
没有什么可以阻止您扩展ScheduledExecutorService并根据您的需要进行修改,但我不会按原样推荐它。
答案 1 :(得分:0)
主要原因可能只是您正在阅读的大部分代码在之前编码(或之前编码的模式之后),并发包被大量使用。
次要可能是信任。当您编写对应用程序至关重要的内容时,您希望确切了解其行为方式。 while(true)循环使得它非常清楚究竟发生了什么......在你真正熟悉它之前,你必须花一些时间处理各种执行程序。
应该有一个解决方案可以解决您的问题,我确信您可以找到定期触发的内容,并且如果一次迭代需要的时间比预期的长一些,则会进行调整。
您甚至可能想要建立自己的执行者。模式本身很好,它只是找到一种方法让它适合你。