Flash Player的工作模型

2021-05-26 14:42:45 字數 1517 閱讀 7544

flash player的工作模型

flash player主要由兩大部件組成,如圖1-4所示。

顧名思義,actionscript虛擬機器負責執行編譯後的actionscript位元組碼,而圖形渲染引擎則用來繪製「顯示列表」(display list)中的圖形物件。

1.4.1   flash player的幀執行模型

1)flash player發出事件(event)。這些事件包括由timer、mouse、enter_frames、urlloader等物件所發出的事件。如果你不了解事件的概念,請閱讀1.4.2節中的內容。

2)使用者**被執行。在這個階段執行所有偵聽第1步中flash player發出的事件的**。這裡的使用者**指的是actionscript虛擬機器以外的由開發者所編寫的**。在這裡,flex sdk也屬於使用者**。

3)render事件被派發。render事件的派發是由使用者**中呼叫flash.display.stage物件的invalidate()方法所引起的,stage(舞台)是flash中顯示物件的根容器。關於顯示物件和stage請參照1.4.2節中的內容。從幫助文件和flex元件源**來看,invalidate()只是告知flash player當前的顯示列表已經發生變化或者說已經失效,該方法並不直接派發render事件,而是由flash player在渲染顯示列表之前檢查顯示列表是否失效。如果顯示列表已經失效,則會在渲染新顯示列表前派發render事件,給使用者**最後的執行機會。

4)最後的使用者**被執行。偵聽第3步render事件的**在此處被執行,這是使用者**在渲染顯示列表前最後更改顯示列表的機會。在此階段,使用者**呼叫stage物件的invalidate()方法則不會再派發新的render事件。在**清單1-1中,我們在render事件的偵聽方法onrender中呼叫了stage.invalidate()方法,但沒有偵聽到rneder事件。如果在enter_frame事件的偵聽方法中呼叫stage.invalidate()則會導致flash player派發render事件。

**清單1-1   invalidate()方法的用途

xmlversion

="1.0"

encoding

="utf-8"

?>

xmlns:mx

=""="absolute"

xmlns:ns1

="*"

width

="660"

height

="415"

="1"

="onaddtostage(event);"

>

mx:script

>

mx:script

>

>

flash player渲染出最新的顯示列表。渲染顯示列表的過程中不會有任何使用者**被執行,這是乙個黑箱操作,開發者無法參與。

flash執行一幀的整個過程如圖1-5所示。

至此,希望讀者在心中牢記flash執行每一幀所經歷的三個階段:

使用者動作階段

失效動作階段

渲染動作階段

突破flash player的睡眠模式

adobe對睡眠模式的解釋 當頁面最小化或者失去焦點時,flash player會進入睡眠模式,framerate會下降到4fps以下 雖然stage.framerate 屬性將返回原始 swf 檔案的幀速率,但實際上不是 timer和enter frame事件將受到影響。1.開啟flash pro...

Flash Player 的 幀重新整理率

原始文獻 頁碼號27 29 翻譯者劉錦行 whizen 翻譯時間 修訂記錄 幀重新整理率 flash player 能夠根據設定的幀重新整理率來渲染 gui元件 顯示列表 與 flash 動畫檔案不同的是 flash 動畫通常在乙個時間線上需要顯示多個幀 flex 程式雖然沒有多個幀需要顯示 但是幀...

恢復低版本的FlashPlayer

做頁遊開發,經常會遇到一些很奇怪的問題。我最近就遇到乙個問題 使用者進入遊戲,只顯示遊戲部分介面,chrome瀏覽器是正常的,就ie死活不行,而我自己的ie卻又是可以的 都是ie8 右擊看了一下flash player的版本號,她的ie8使用的flash player版本號比她本機的chrome要高...