1. 程式人生 > >Egret的TimerEvent.TIMER和Event.ENTER_FRAME的區別

Egret的TimerEvent.TIMER和Event.ENTER_FRAME的區別

TimerEvent.TIMER,從Timer的引數就可以看出來,是delay多少時間,意思是當一個函式執行完成後再Delay多久。

舉例: Timer 設定為 間隔40ms,而Timer的函式執行花費25ms,那麼,Timer將以65ms的間隔恆定執行。

比如間隔多久發射子彈,建立敵機,建立隕石等...

Event.ENTER_FRAME是定時間隔多少時間出發。如果執行時間比間隔時間長,則會間隔執行時間這麼久。

舉個例子: Flash的stage.FrameRate設定為 25即,Event.EnterFrame的出發間隔為40ms,如果Event.EnterFrame的執行函式花費時間為25ms,那麼Event.EnterFrame將以間隔40ms的恆定頻率執行。

Event.ENTER_FRAME事件做動畫的缺陷

  1,每當想要改變指定的幀速率的時候,我們必須更新基於該幀速率計算速度的所有程式碼(除非使用基於速度的動畫)

  2,Flash執行器不總是能到達指定的幀速率,動畫變慢。這種變慢甚至因系統負載而不同,幀速率可能只在短時期下降後恢復到它的正常速率。

  在一般情況中,用稍有差別的速度播放一個動畫是可以接受的,但是,當要求精確控制或者可見精度是有影響的時候,我們必須考慮幀速率的缺陷。此時,我們用基於逝去的時間而不是關聯於指定幀來計算移動一個移動的距離更合適(即基於速度的動畫)


比如物體移動座標,計算碰撞等

所以如果每一幀都要檢測的話,最好使用Event.ENTER_FRAME,否則用TimerEvent.TIMER,

Event.ENTER_FRAME的動畫程式碼一般要比基於Timer的等價物更簡單和使用較少的記憶體