看板 Flash 關於我們 聯絡資訊
除了用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