0

我了解Flash Player 和 Air Debugger 中的运行时代码执行基础知识。但我想知道 Timer 代码执行是如何完成的。使用 Timer 而不是 enterFrame 事件进行类似操作会更好吗?哪一个更好地最大化优化?

4

1 回答 1

1

这取决于你想用它做什么。大多数人会强烈地说要使用Event.ENTER_FRAME。在大多数情况下,这就是您想要的。它只会在每帧开始构建时被调用。如果您的应用程序以 24fps(默认)运行,则该代码将每 41.7ms 运行一次,假设没有丢帧。对于几乎所有与 GUI 相关的情况,您不希望比这更频繁地运行该代码,因为它完全没有必要(当然,您可以更频繁地运行它,但它不会有任何好处,因为屏幕只会经常更新)。

但是,有时您需要更频繁地运行代码,主要是在与 GUI 无关的情况下。这可以从需要在后台进行的系统检查到需要绝对精确的事情,例如需要以精确的时间间隔显示/更新的对象(我相信计时器精确到毫秒,而ENTER_FRAME 仅精确到 1000/帧速率毫秒)。

最后,将 Timer 用于调用少于 ENTER_FRAME 的任何内容都没有多大意义。除此之外,您还有丢帧的风险。ENTER_FRAME 几乎适用于所有与图形相关的东西,除了让某些东西在精确的时间出现/更新。即便如此,您也应该使用 ENTER_FRAME,因为无论如何它只会在下一帧中呈现。

您需要逐案评估每种情况,并确定哪种情况最适合该特定情况,因为没有适用于所有情况的最佳答案。

编辑

我拼凑了一个快速测试应用程序,以查看 Timer 何时触发。帧率为 24fps (42ms),我将计时器设置为每 10ms 运行一次。这是它运行的时间的选择。

2121
2137
2154
2171
2188
2203
2221
2237

如您所见,它每 15-18 毫秒运行一次,而不是我想要的 10 毫秒。我还测试了 20ms、100ms、200ms 和 1000ms。最后,每一个都在它应该发射的大约 10 毫秒内发射。所以这并不像我最初想象的那么精确。

于 2013-07-26T16:23:17.497 回答