作者Jerrynet (我爱Hot_game板)
看板Flash
标题Re: [实验] 准时的 Timer
时间Tue Apr 29 22:58:50 2008
除了用Date函数之外,还可以用getTimer(),
这函数会传回从开始执行swf到现在所经过的毫秒数,用同样方法一样可以得到精确的时间
不过我在推文所说的setInterval(),不是精确的,在Help里有写到:
============
如果 interval 小於 SWF 档影格速率 (例如,每秒 10 个影格 [fps] 就相当於 100 毫秒
的间隔),间隔函数就会尽可能的接近 interval 时间值来呼叫。在间隔期间执行过长
、需要耗用记忆体的 Script 会导致延迟。如果呼叫的函数起始视觉元素的变更,您可以使用
updateAfterEvent() 函数,以确定萤幕有足够的重新整理频率。
如果 interval 大於 SWF
档的影格速率,则只有在 interval 已过期「而且」播放磁头已进入下一个影格之後,才
会呼叫间隔函数,如此可以将每次萤幕重新整理的影响降至最低。
=============
所以setInterval是不准确的简单计时工具而已,而AS2.0的Tween函数也用setInterval作为
计时的工具,所以两个都不可靠= =
所以可能会想AS3.0提供的Timer类别是否可靠呢?
请见以下节录的内容:
=============
您可以建立 Timer 物件,以便依排程在指定的间隔执行一次或重复执行程式码。
取决於 SWF 档的影格速率或 Flash Player 的环境 (可用记忆体及其它因素),
Flash Player 可能会在稍微偏移的间隔传送事件。
例如,如果 SWF 档设定为每秒播放 10 个影格 [fps],也就是 100 毫秒的间隔,不过您
的计时器设定为在 80 毫秒触发事件,Flash Player 便会在接近 100 毫秒间隔时触发事
件。 需要耗用记忆体的指令码也可能使事件偏移。
=============
所以一样是不可靠的= =
至於为什麽Flash要这样做呢?这是因为AVM的设定,
请见ActionScript Virtual Machine Mental Modal:
For AS1.0, AS2.0:
http://0rz.tw/7f43y
For AS3.0:
http://0rz.tw/11418
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.70.112.56
※ 编辑: Jerrynet 来自: 219.70.112.56 (04/29 23:03)
1F:推 etrexetrex:0.0 04/29 23:03
2F:→ Jerrynet:更新了,加了AVM处理 Script 和 Rendering 的方式 04/29 23:04