快取顯示物件

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 ,也不會建立表面 (快取的點陣圖):

  • 點陣圖的寬度或高度大於 2880 像素。

  • 點陣圖無法配置記憶體 (因為發生記憶體不足的錯誤)。

快取的點陣圖變形矩陣

在行動裝置的 AIR 應用程式中,您應該在每次設定 cacheAsBitmap 屬性時,同時設定 cacheAsBitmapMatrix 屬性。設定此屬性可讓您將範圍較廣的變形套用至顯示物件,而不會觸發重新顯示。

mySprite.cacheAsBitmap = true; 
mySprite.cacheAsBitmapMatrix = new Matrix();

當您設定此矩陣屬性時,可以將下列其他變形套用至顯示物件,而不必到達物件:

  • 不進行像素貼齊即移動或轉譯

  • 旋轉

  • 縮放

  • 傾斜

  • 變更 Alpha (在 0 與 100% 透明度之間)

這些變形會直接套用至快取的點陣圖。