螢幕上彩色語法的程式碼特寫,象徵 Flash ActionScript 開發

← INSIGHTS & PERSPECTIVES | 前端開發

Flash 時間軸運作注意點:遮罩、關鍵影格與效能優化筆記

整理 Flash 時間軸運作的三大注意點:圖層在遮罩之下時物件會每格重新運算、經過關鍵影格時元件會重新產生導致 AS 指定失效,以及形狀漸變與移動漸變的效能差異與重繪優化技巧。

在 Flash 裡用 ActionScript 操作時間軸上的物件時,我最常踩到的坑就是「指定的物件突然失效」。這篇整理我在實務上歸納出的三大注意點:遮罩會讓物件每格重新運算、關鍵影格會讓元件重新產生,以及不同漸變方式對效能的影響。搞懂這些機制,就能避免 script 指定的參考莫名失效或動畫拖垮效能。

為什麼物件放在遮罩之下,script 指定的值會「跳回去」?

當圖層在遮罩之下時,影格每次前進,所有的物件都會重新運算並重新產生。這會造成兩個常見問題:

  1. 若有一個動態 label 在遮罩之下,原本顯示的文字為「舊的值」,在影格 1 時我用 script 將其值設為「新的值」,當影格前進到下一個影格時,又會變回顯示「舊的值」——即使中間沒有關鍵影格也一樣。
  2. 同理,如果我在影格 1 時在 AS 裡指定某個 MovieClip,當進入下一個影格時,原本在 AS 指定的 MovieClip 會與當下畫面上的物件不同,造成無法對它做操作的狀況。

解法:應該要到某定點影格時,再在 AS 裡對物件做指定的動作,不要在太前面的影格就先指定。

經過關鍵影格時,為什麼變數裡存的元件參考會失效?

每次重新經過一個關鍵影格,其物件都會重新產生。這帶來兩個狀況:

狀況現象
影格 1 有元件 a b c,影格 2 有元件 d e在影格 1 用 AS 把 a b c 指定到某個變數,當時間軸跑到影格 2 再跑回影格 1,變數裡存的還是上一次影格 1 的元件,但與現在畫面上影格 1 顯示的元件不同
MovieClip 的第 1 影格和第 5 影格都是關鍵影格,兩格上都有同樣的元件 a b c在影格 1 用 AS 指定元件 a b c,當影格跑到影格 5 時,畫面上顯示的元件會與影格 1 的元件不同(若沒有關鍵影格則會是相同的)

簡單說:只要時間軸重新經過關鍵影格,畫面上的就是「新物件」,舊的變數參考已經指向被丟棄的舊實體。

形狀漸變和移動漸變,哪個比較耗效能?

兩者的運作成本差很多,我整理如下:

類型運作方式對象限制效能
形狀或顏色漸變每進入一次影格,便會整個圖層做重繪不能是元件,必須是向量圖形耗效能
傳統移動漸變單純對元件的位置或大小做改變,元件本身不會重繪對象一定要是元件較省效能

如何降低 Flash 動畫的重繪成本?

關於重繪與載入效能,我歸納出三個原則:

  • 重繪效能會與重繪區域大小有關,最耗效能的是向量漸層或色塊。若無必要,盡可能將元件改用 bitmap 點陣形式。
  • FLV 動畫在初始載入時會較花效能,但若是畫面上同時有多個動畫,FLV 反而較省效能。
  • 搭配前述觀念:避免把物件放在遮罩下做動態更新、避免時間軸反覆經過關鍵影格,都能減少不必要的重新運算。

延伸閱讀

常見問題

Q為什麼用 script 改了動態文字,下一格又變回舊值?

因為該圖層在遮罩之下,Flash 每前進一個影格都會把物件重新運算、重新產生,script 設定的值不會被保留。解法是把指定值的動作移到確定不會再重算的定點影格,或改變圖層結構避開遮罩重算。

Q為什麼存進變數的 MovieClip 之後不能操作?

時間軸重新經過關鍵影格時,元件會重新產生,畫面上是新實體,變數裡存的還是舊實體的參考,兩者已經不同。應在時間軸到達定點影格後,重新用 AS 指定一次物件。

Q形狀漸變的對象為什麼不能是元件?

形狀或顏色漸變每進入一次影格就會整個圖層重繪,重繪的對象必須是向量圖形才能計算形狀補間,元件無法被拆解重繪。反過來,傳統移動漸變只改變位置或大小,對象就一定要是元件。

QFLV 動畫效能如何?一次放多個動畫時該用什麼?

FLV 在初始載入時比較花效能,但多個動畫同時播放時,FLV 會比向量動畫省效能。所以單一動畫用向量即可,多動畫並列的場景優先考慮 FLV。

最後更新

2026-08-28(原文發布於 2013-08-02,本文保留原始筆記內容並補上 GEO 結構。)

關於作者 {#author}

Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。

首次發布:2013-08-02