Flash Timer的用法 计时器
由于Flash是解釋運(yùn)行,限于FP的虛擬機(jī)有諸多限制,所以不要指望能和C++那樣擁有可以到達(dá)毫秒級(jí)的高精度計(jì)時(shí),甚至連微秒級(jí)別的計(jì)時(shí)也不容樂觀,我們今天就來探討一下常用的計(jì)時(shí)方法和他們的差別。
1 Event.ENTERFRAME事件
????????這個(gè)應(yīng)該是最常見的了,幾乎很多計(jì)時(shí)都用這個(gè)事件。它表示幀頻,也就是說,每秒鐘播放多少個(gè)幀,最新的CS5版本默認(rèn)是24幀,早期的版本默認(rèn)是12幀,這個(gè)是由于為了彌補(bǔ)和提高早期動(dòng)畫不流暢的問題而提高了幀率,事實(shí)也證明,人眼對(duì)于每秒30幀以上的畫面切換就不會(huì)再感到閃爍,對(duì)于Flash,24幀就足夠了
????????Event.ENTERFRAME事件雖然好用,但是在FP10.1版本以后,Adobe為了解決Flash內(nèi)存占用的問題,做了一個(gè)優(yōu)化:那就是如果當(dāng)前的Flash,包括FP中本地和WEB頁面上的動(dòng)畫,沒有處于焦點(diǎn)狀態(tài),也就是說有其他窗口遮蓋了Flash,那么它會(huì)自動(dòng)降頻,降為2幀/秒來運(yùn)行,這樣的話計(jì)時(shí)就大大不準(zhǔn)了,這種方法不太實(shí)用時(shí)間類的計(jì)時(shí)。
2 Timer
????????Timer真是讓人既愛又恨,不可否認(rèn)的是,Timer的確是一個(gè)非常方便的計(jì)時(shí)器組件,但是他的精度實(shí)在是太低了,1個(gè)小時(shí)中間我見過的誤差能有幾分鐘,我們也可以測試一下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運(yùn)行到現(xiàn)在的毫秒數(shù),運(yùn)行上面的代碼我們會(huì)發(fā)現(xiàn),每次trace的結(jié)果都忽大忽小,按道理說應(yīng)該是按照一定的固定數(shù)字增加才對(duì),但是這個(gè)數(shù)字并不固定,雖然trace會(huì)占用一部分時(shí)間,但是總的來說,Timer的精度還是不容樂觀。
3 setInterval()方法
????????這個(gè)是按照指定的毫秒數(shù)去不斷運(yùn)行一個(gè)方法,但是和Timer差不多,而且setInterval()本身的機(jī)制需要Flash不斷的去調(diào)用,因此也不是很理想。
4 getTimer()方法
????????有人說用getTimer()來計(jì)時(shí),理由是它獲得的是系統(tǒng)所經(jīng)過的毫秒數(shù),不錯(cuò),但是你怎么來調(diào)用這個(gè)方法呢?還是要在Timer或者ENTERFRAME里調(diào)用,俗話說上梁不正下梁歪,就算getTimer再精確,由于調(diào)用它的方法不精確,所以也沒有多大意思
5 Tween
????????Tween也可以計(jì)時(shí),這個(gè)一般人好像并不會(huì)用到,但是用Tween來做計(jì)時(shí)有個(gè)明顯的好處就是,他不會(huì)受WEB頁面的影響,因?yàn)橛胁簧偃朔从吃赪EB里播放Flash有的機(jī)器快有的慢,如果用Tween來計(jì)時(shí)就沒有這個(gè)問題,具體原因我也說不清,但是我的確用這個(gè)方法解決了曾經(jīng)一個(gè)Flash在不同瀏覽器計(jì)時(shí)不準(zhǔn)確的問題。
?
轉(zhuǎn)自http://www.zystudios.cn/blog/post/50.Shtml
?
總結(jié)
以上是生活随笔為你收集整理的Flash Timer的用法 计时器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 架构之美第九章-架构与设计
- 下一篇: 【教程】谷歌浏览器移到其他盘之后,本地网