Flash Timer的用法 计时器
由于Flash是解釋運行,限于FP的虛擬機有諸多限制,所以不要指望能和C++那樣擁有可以到達毫秒級的高精度計時,甚至連微秒級別的計時也不容樂觀,我們今天就來探討一下常用的計時方法和他們的差別。
1 Event.ENTERFRAME事件
????????這個應該是最常見的了,幾乎很多計時都用這個事件。它表示幀頻,也就是說,每秒鐘播放多少個幀,最新的CS5版本默認是24幀,早期的版本默認是12幀,這個是由于為了彌補和提高早期動畫不流暢的問題而提高了幀率,事實也證明,人眼對于每秒30幀以上的畫面切換就不會再感到閃爍,對于Flash,24幀就足夠了
????????Event.ENTERFRAME事件雖然好用,但是在FP10.1版本以后,Adobe為了解決Flash內存占用的問題,做了一個優化:那就是如果當前的Flash,包括FP中本地和WEB頁面上的動畫,沒有處于焦點狀態,也就是說有其他窗口遮蓋了Flash,那么它會自動降頻,降為2幀/秒來運行,這樣的話計時就大大不準了,這種方法不太實用時間類的計時。
2 Timer
????????Timer真是讓人既愛又恨,不可否認的是,Timer的確是一個非常方便的計時器組件,但是他的精度實在是太低了,1個小時中間我見過的誤差能有幾分鐘,我們也可以測試一下Timer的精度:
var TestTime:Timer = new Timer(1000); TestTime.addEventListener(TimerEvent.TIMER,OnTimer); TestTime.start(); private function OnTimer(e:TimerEvent){ var tick = getTimer(); trace(tick); }getTimer()是獲得Flash運行到現在的毫秒數,運行上面的代碼我們會發現,每次trace的結果都忽大忽小,按道理說應該是按照一定的固定數字增加才對,但是這個數字并不固定,雖然trace會占用一部分時間,但是總的來說,Timer的精度還是不容樂觀。
3 setInterval()方法
????????這個是按照指定的毫秒數去不斷運行一個方法,但是和Timer差不多,而且setInterval()本身的機制需要Flash不斷的去調用,因此也不是很理想。
4 getTimer()方法
????????有人說用getTimer()來計時,理由是它獲得的是系統所經過的毫秒數,不錯,但是你怎么來調用這個方法呢?還是要在Timer或者ENTERFRAME里調用,俗話說上梁不正下梁歪,就算getTimer再精確,由于調用它的方法不精確,所以也沒有多大意思
5 Tween
????????Tween也可以計時,這個一般人好像并不會用到,但是用Tween來做計時有個明顯的好處就是,他不會受WEB頁面的影響,因為有不少人反映在WEB里播放Flash有的機器快有的慢,如果用Tween來計時就沒有這個問題,具體原因我也說不清,但是我的確用這個方法解決了曾經一個Flash在不同瀏覽器計時不準確的問題。
?
轉自http://www.zystudios.cn/blog/post/50.Shtml
?
總結
以上是生活随笔為你收集整理的Flash Timer的用法 计时器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 架构之美第九章-架构与设计
- 下一篇: PDFedit