3

出于代码实践和改进的目的,我正在编写一个简单的游戏(目前编写它的通用性足以成为一个游戏引擎)。

我目前有很多setInterval调用正在运行,即每个“实体”(预制件/播放器)查看按下的键,检查碰撞,更新位置参考等。我只是想知道什么样的性能问题(如果有的话)可能会从高单独的 setInterval 的数量。它们彼此相关的时间并不重要,所以我不担心它们会不同步(无论如何它们的间隔略有不同),但是一个setInterval循环遍历所有实体以运行所有检查的单个实际上会更多高效的?我对该选项唯一担心的是,该功能可能需要比间隔时间更长的时间。当每个人都做了很少的量时,创建新的间隔是否会产生足够的压力来担心?

4

1 回答 1

3

首先,我不会使用,setInterval因为如果回调中的代码执行时间比间隔时间长,回调可能会堆积起来并一个接一个地发生。

至于拥有多个计时器,我认为这不是一个好主意,即使您不关心同步。它使整体事情变得过于复杂而难以维护,如果您想调节游戏速度,这将成为一场噩梦。我肯定会选择一个计时器。

此外,如果您不知道,有一个requestAnimationFrame针对执行动画进行了优化的功能,因此您可以使用它而不是setTimeout. 如果浏览器能够跟上,它基本上会以 60fps 的速度被调用。

您可以使用timestamp作为参数传递给传递给的回调函数requestAnimationFrame来确定自上次游戏循环迭代以来经过了多少时间。

于 2013-09-21T16:06:31.560 回答