2013-09-01

1-4 Frame Actions所在位置與執行順序

按鈕元件裡的影格不能放 Frame Actions,影片片段的影格裡才能使用 Frame Actions。

一般程式語言可以利用編譯器將程式轉換成可執行的機器碼,或者以解譯器執行。Scripts 和一般的程式語言不同的地方,在於 Scripts 通常有個 Host(寄主,執行系統),而且可以控制 Host 中的預設物件。例如,JavaScript 的 Host 是瀏覽器,藉由瀏覽器中的 JavaScript 解譯引擎執行,利用 JavaScript 可以控制 Document Objects,建立動態網頁。

ActionScript 的 Host 可不是 Flash 編輯軟體,而是 Flash Player。Flash 編輯軟體是開發 Flash 動畫、應用軟體的整合開發環境。開發編譯完成的 swf 檔,才能在 Flash Player 環境中解譯執行。

ActionScript 通常是位於前面影格的 Actions 先執行。例如,runSequence1.fla 中有 2 個影格,其中分別有下面 2 段 Frame Actions:

trace("第一格動作");

trace("第二格動作");
stop();

測試影片(按「Ctrl」+「Enter」)的結果會在輸出面板(Output panel)得到:

第一格動作
第二格動作

變數有宣告才能使用,宣告的位置不一定要在最前面;但是未宣告的變數,不能使用。例如,runSequence2.fla 中有 2 個影格,其中分別有下面 2 段Frame Actions:

var a:int = 10;
trace(a);
trace(b);
trace(c);

var b:int = 20;
stop();

執行的結果會在輸出面板得到:

10
0
ReferenceError: Error #1065: 變數 c 未定義。 at runSequence2_fla::MainTimeline/runSequence2_fla::frame1()

b 有在第 2 格宣告,所以可以使用,預設值為 0。c 則未宣告,故在測試影片時發生錯誤。

如果是函式定義,不論定義在哪個影格皆可使用,和影格的順序沒有關係。例如,runSequence3.fla 中有 2 個影格,其中分別有下面 2 段 Frame Actions:

f2();
f1();
function f1(){
  trace("呼叫 f1 函式");
}

function f2(){
  trace("呼叫 f2 函式");
}
stop();

執行的結果會在輸出面板得到:

呼叫 f2 函式
呼叫 f1 函式

另外,父影片物件的 Frame Actions 會比子影片物件的 Frame Actions 先執行。這一點也要小心留意,以避發生程式 Bugs。若兩物件位處相同的物件內,z-index 較小的,其 Frame Actions 先執行。

例如,runSequence4.fla 中有 3 個影片片段元件:mcA、mcB 和 mcC。其中 mcA 元件包含一個 mcB 實體和一個 mcC 實體,mcC 實體的 z-index 比 mcB 實體的要來得小。場景包含一個 mcA 實體(物件架構類似 1-3 的圖)。場景和每個元件的第一個影格都有一行敘述,用以輸出訊息,測試結果如下圖。

父影片物件的 Actions 會比子影片物件的 Actions 先執行

目錄

沒有留言:

FB 留言