Flash Player如何执行Timer?

时间:2013-07-26 09:12:43

标签: optimization air flash

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

1 个答案:

答案 0 :(得分:1)

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

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

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

您需要根据具体情况评估每种情况,并确定哪种情况最适合该特定情况,因为所有情况都没有最佳答案。

修改

我把一个快速测试应用程序放在一起,以查看Timer何时触发。帧速率为24fps(42ms),我将定时器设置为每10ms运行一次。以下是它的选择次数。

2121
2137
2154
2171
2188
2203
2221
2237

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