Flash 時間軸與關鍵影格動畫概念示意圖

← INSIGHTS & PERSPECTIVES | 前端開發

Flash 時間軸運作注意點:遮罩、關鍵影格與效能陷阱解析

整理 Flash 時間軸運作的實戰注意點:遮罩下物件每格重新產生導致 script 指定失效、經過關鍵影格時元件重建造成參考錯位,以及形狀漸變與移動漸變的效能差異與優化建議。

這篇文章整理我在開發 Flash 內容時,關於時間軸(timeline)運作的三大類實戰注意點:遮罩下的物件會在每個影格重新產生、經過關鍵影格時元件會被重建,以及形狀漸變與移動漸變的效能差異。理解這些機制,可以避開「script 指定的物件突然失效」這類難以追蹤的 bug,也能做出效能更好的動畫。

為什麼遮罩下的物件會讓 script 指定失效?

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

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

解法:應該要到某個定點影格時,再在 ActionScript 裡對物件做指定的動作,而不是在時間軸一開始就搶著指定。

為什麼重新經過關鍵影格時,元件參考會壞掉?

每次時間軸重新經過一個關鍵影格,其上的物件都會重新產生。這會造成「變數裡存的參考」與「畫面上實際顯示的物件」不一致:

  1. 若在影格 1 裡有元件 a、b、c,在影格 2 裡有元件 d、e。當我們用 ActionScript 在影格 1 裡把 a、b、c 指定到某個變數,當時間軸跑到影格 2、再跑回影格 1 時,原本變數裡存的是上一次影格 1 的元件,但會與現在畫面上影格 1 顯示的元件不同。
  2. 若某個 MovieClip 的第 1 影格和第 5 影格都是關鍵影格,且兩個關鍵影格上都有同樣的元件 a、b、c。在影格 1 用 ActionScript 指定這些元件,當影格跑到影格 5 時,畫面上顯示的元件也會與影格 1 的不同——若沒有關鍵影格的狀況下則會是相同的。
情境畫面上的元件變數裡的參考結果
播放頭停留在同一個關鍵影格區間相同有效可正常操作
播放頭離開又回到關鍵影格重新產生指向舊物件參考失效
區間內沒有關鍵影格相同有效可正常操作

哪種漸變方式比較省效能?

  1. 形狀或顏色漸變:每進入一次影格,便會對整個圖層做重繪。因此它的漸變對象不能是元件,而需要是向量圖形——非常耗效能。
  2. 傳統移動漸變:只是單純對元件的位置或大小做改變,元件本身不會重繪,因此對象一定要是元件。效能遠優於形狀漸變。
  3. 重繪效能與重繪區域大小有關,最耗效能的是向量漸層或色塊。若無必要,盡可能將元件改用 bitmap 點陣形式。
  4. FLV 動畫在初始載入時較花效能,但若畫面上同時有多個動畫,FLV 反而較省效能。

延伸閱讀

常見問題

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

因為該圖層在遮罩之下,遮罩下的物件在每個影格前進時都會重新運算並重新產生,script 的修改會被覆蓋。解法是把指定動作延後到某個定點影格再執行,或調整圖層與遮罩的結構。

Q為什麼 MovieClip 的參考在時間軸跑一圈後就失效?

每次播放頭重新經過關鍵影格,其上的物件都會重新產生,原本存的參考指向的是舊物件,與現在畫面上的不同。應在需要的影格上重新指定,或避免讓播放頭重複經過關鍵影格。

Q形狀漸變和移動漸變該怎麼選?

需要改變向量圖形的形狀或顏色時只能用形狀漸變,但它每格都重繪整個圖層,非常耗效能。若只是移動、縮放元件,一律用傳統移動漸變,元件本身不重繪,效能好得多。

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

縮小重繪區域、避免向量漸層與大面積色塊,並盡量把元件改成 bitmap 點陣形式。多動畫並存的場景可考慮 FLV,雖然初始載入較重,但同時播放多個動畫時反而省效能。

參考資料

  • 本文改寫自個人部落格舊文《Flash 時間軸運作相關注意點》(2013-08-02),內容為實際專案開發筆記。

最後更新

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

關於作者 {#author}

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

首次發布:2013-08-02