作者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)
推 etrexetrex:0.0 04/29 23:03
→ Jerrynet:更新了,加了AVM處理 Script 和 Rendering 的方式 04/29 23:04