代码之家  ›  专栏  ›  技术社区  ›  MDEV

多个特定用途的设置间隔或单个超级间隔

  •  3
  • MDEV  · 技术社区  · 13 年前

    出于代码练习和改进的目的,我正在编写一个简单的游戏(目前编写的游戏足够通用,可以作为游戏引擎)。

    我现在有很多 setInterval 调用正在运行,即每个“实体”(预制/播放器)都在查看按下的键、检查冲突、更新位置引用等。我只是想知道大量单独的setIntervals会产生什么样的性能问题(如果有的话)。它们之间的时间关系并不重要,所以我不担心它们会不同步(无论如何,它们的间隔略有不同),但 设置间隔 通过所有实体循环来运行所有检查实际上更有效?我对这个选项唯一担心的是,函数可能需要比间隔时间更长的时间。当每一个间隔都很小的时候,创造新的间隔会产生足够的压力吗?

    1 回复  |  直到 13 年前
        1
  •  3
  •   plalx    13 年前

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

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

    此外,如果你不知道aleady,还有 requestAnimationFrame 为执行动画而优化的函数,因此您可以使用它而不是 setTimeout 。如果浏览器能跟上的话,它基本上会以60fps的速度被调用。

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