快取顯示物件
Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本
不論您正在建立的是應用程式還是以指令碼建立的複雜動畫,當 Flash 中的設計程式愈來愈龐大時,就必須同時考慮到效能和最佳化的問題。當您有內容保持為靜態 (如矩形 Shape 實體) 時,Flash Player 和 AIR 不會將內容最佳化,因此,當您變更矩形的位置時,Flash Player 或 AIR 便會重新繪製整個 Shape 實體。
您可以快取指定的顯示物件,以改善 SWF 檔的效能。顯示物件是「表面」,基本上是實體之向量資料的點陣圖版本,這些是您不想要在 SWF 檔的處理過程中變更太多的資料。因此,開啟了快取的實體並不是隨著 SWF 檔播放連續重新繪製,而是讓 SWF 檔快速呈現。
備註:
您可以在重新建立表面時更新向量資料。因此,表面中快取的向量資料不需要與整個 SWF 檔相同。
將顯示物件的
cacheAsBitmap
屬性設定為
true
可讓顯示物件快取本身的點陣圖形式。Flash Player 或 AIR 會建立該實體的表面物件,這是一個快取點陣圖而非向量資料。如果您變更顯示物件的範圍,則會重新建立表面,而非重新調整表面的大小。表面可以巢狀結構出現在其它表面中。子表面會複製其點陣圖至其父表面上。如需詳細資訊,請參閱
啟用點陣圖快取
。
DisplayObject 類別的
opaqueBackground
屬性和
scrollRect
屬性是與使用
cacheAsBitmap
屬性快取的點陣圖相關。雖然這三個屬性彼此獨立,但當物件快取為點陣圖時,
opaqueBackground
和
scrollRect
屬性運作最順暢,只有在將
cacheAsBitmap
設定為
true
時,才會看到
opaqueBackground
和
scrollRect
屬性的效能優點。如需有關捲動顯示物件內容的詳細資訊,請參閱
左右移動和捲動顯示物件
。如需有關設定不透明背景的詳細資訊,請參閱
設定不透明背景顏色
。
如需有關 Alpha 色版遮色片 (必須將
cacheAsBitmap
屬性設定為
true
) 的詳細資訊,請參閱
遮蓋顯示物件
。
啟用快取的時機
啟用顯示物件的快取會建立表面,這會有幾項好處,例如幫助複雜的向量動畫更快速呈現。多數情況下,您都會想啟用快取,而且可能會想要一直啟用快取來改善 SWF 檔的效能,但是在某些情況下,啟用快取並不能改善效能,有的情況甚至會降低效能。本節會說明在哪些情況下應該使用快取,哪些情況下則使用一般的顯示物件即可。
快取資料的整體效能是依據實體向量資料的複雜程度、變更的資料多寡,以及是否設定
opaqueBackground
屬性而定。如果您只變更小區域,則使用表面和使用向量資料的差異不大。在您部署應用程式之前,可以先測試這兩種情況。
使用點陣圖快取的時機
以下是在啟用點陣圖快取時,會產生明顯優勢的典型狀況:
-
複雜的背景影像:含有複雜且詳盡向量資料之背景影像的應用程式,這個向量資料或許是套用了追蹤點陣圖命令後的影像,或是以 Adobe Illustrator® 建立的圖像。這個背景上或許還有動畫字元,由於背景必須持續地重新產生向量資料,因此會降低這個動畫的速度。若要改善效能,可以將背景顯示物件的
opaqueBackground
屬性設定為
true
,如此這個背景便會以點陣圖的方式呈現,並且可以快速地重新繪製,增加播放動畫的速度。
-
捲動的文字欄位:在捲動的文字欄位中顯示大量文字的應用程式。您可以將文字欄位放置於設定為可捲動並具有捲動範圍 (
scrollRect
屬性) 的顯示物件中。這會啟用所指定實體的快速像素捲動功能。當使用者捲動這個顯示物件實體時,Flash Player 或 AIR 便會移開已捲動的像素,並產生新顯露區域的內容,而不是重新產生整個文字欄位。
-
重疊視窗的系統:具有重疊視窗之複雜系統的應用程式。每個視窗都可以加以開啟或關閉 (例如,網頁瀏覽器視窗)。如果將每個視窗都標示為「表面」(將
cacheAsBitmap
屬性設定為
true
),就會分離並快取每個視窗。如此使用者便可以拖曳視窗讓這些視窗互相重疊,而且每個視窗並不需要重新產生向量內容。
-
Alpha 色版遮色片:當您使用 Alpha 色版遮色片時,必須將
cacheAsBitmap
屬性設定為
true
。如需詳細資訊,請參閱
遮蓋顯示物件
。
在上述的情況中啟用點陣圖快取,都可以藉由最佳化向量圖形,改善應用程式的回應和互動品質。
此外,只要將濾鏡套用至顯示物件,即使明確將
cacheAsBitmap
設定為
false
,它也會自動設定為
true
。如果您將顯示物件的所有濾鏡都清除,
cacheAsBitmap
屬性就會還原為上一次的設定。
避免使用點陣圖快取的時機
在錯誤的情況下使用此功能,可能會對 SWF 檔案的效能造成負面的影響。使用點陣圖快取時,請切記下列原則:
-
請勿過度使用表面 (啟用快取的顯示物件)。每個表面都會比一般顯示物件使用更多的記憶體,這表示您應該只在需要改善成像效能時,才啟用這些表面。
每個快取的點陣圖都會比一般顯示物件使用更多的記憶體,例如,如果「舞台」上 Sprite 實體的大小為 250 x 250 像素,在快取時可能會使用 250 KB 的記憶體資源,而一般 (未快取) 的 Sprite 實體則僅使用 1 KB 的記憶體而已。
-
請避免放大快取的表面。如果您過度使用點陣圖快取,便會消耗掉大量的記憶體 (請參閱上一個標題),尤其是在放大內容時。
-
在大部分顯示物件實體都是靜態 (非動畫) 的情況下,請使用表面。您可以拖曳或移動實體,但實體的內容不應過度被製成動畫或變更。動畫或變更內容比較可能在包含動畫或 Video 實體的 MovieClip 實體發生。例如,如果您旋轉或轉換某個實體,這個實體便會在表面和向量資料之間進行變更,如此不僅難以處理,也會對 SWF 檔產生負面的影響。
-
如果您將表面與向量資料混合,會增加 Flash Player 和 AIR (有時候是電腦) 需要處理的資料量。所以,請盡量將多個表面組織在一起 (例如,在建立重疊視窗的應用程式時)。
-
請勿快取圖形經常變更的物件。每次您縮放、傾斜、旋轉顯示物件;變更 Alpha 或顏色變化;移動子顯示物件;或是使用圖形屬性繪製時,就會重繪點陣圖快取。如果每個影格都發生此狀況,執行階段必須將物件繪製成點陣圖,然後將該點陣圖複製到舞台,相較於只將未快取的物件繪製到舞台,這將會造成額外的工作。快取與更新頻率之間的效能問題須視顯示物件的複雜度與大小而定,而且只能由測試特定內容決定。
啟用點陣圖快取
若要啟用顯示物件的點陣圖快取,請將其
cacheAsBitmap
屬性設定為
true
:
mySprite.cacheAsBitmap = true;
將
cacheAsBitmap
屬性設定為
true
之後,您可能會發現顯示物件會以像素為座標值,自動對齊整個座標。當您測試 SWF 檔時,應該會注意到任何動畫在複雜的向量影像上會呈現得更快。
如果發生下列其中一或多種情況,即使將
cacheAsBitmap
設為
true
,也不會建立表面 (快取的點陣圖):
快取的點陣圖變形矩陣
在行動裝置的 AIR 應用程式中,您應該在每次設定
cacheAsBitmap
屬性時,同時設定
cacheAsBitmapMatrix
屬性。設定此屬性可讓您將範圍較廣的變形套用至顯示物件,而不會觸發重新顯示。
mySprite.cacheAsBitmap = true;
mySprite.cacheAsBitmapMatrix = new Matrix();
當您設定此矩陣屬性時,可以將下列其他變形套用至顯示物件,而不必到達物件:
這些變形會直接套用至快取的點陣圖。
|
|
|