660 likes | 805 Views
第 20 章. ActionScript 指令與語法. 本章提要. 20-1 變數與變數範圍 20-2 資料類型 20-3 運算子 20-4 判斷條件與迴圈 20-5 Flash 的路徑階層觀念. 20-1 變數與變數範圍. 變數 是用來讓程式暫存資料的 , 變數中所存的資料就叫做變數的「值」 , 變數的值可以是字串、數字、布林值 ... 等資料 ( 關於資料型態請參考 20-2 節 ) 。在使用變數時 , 必須要注意變數的有效範圍 , 否則可能造成程式運作結果錯誤。
E N D
第 20 章 ActionScript 指令與語法
本章提要 • 20-1 變數與變數範圍 • 20-2 資料類型 • 20-3 運算子 • 20-4 判斷條件與迴圈 • 20-5 Flash 的路徑階層觀念
20-1 變數與變數範圍 • 變數是用來讓程式暫存資料的, 變數中所存的資料就叫做變數的「值」, 變數的值可以是字串、數字、布林值...等資料 (關於資料型態請參考 20-2 節)。在使用變數時, 必須要注意變數的有效範圍, 否則可能造成程式運作結果錯誤。 • 由於在 Flash 中, 變數常應用在顯示文字方面, 所以 Flash 有一種特別的變數型態, 叫做文字欄位變數, 這種變數可從屬性面板設定, 使用起來十分簡單方便。
宣告變數與指定變數值 • 在 ActionScript 中不需要事先宣告也可以直接使用變數。事先宣告變數的意思是指, 以 var 指令告訴 Flash, 程式待會兒需要使用這個名稱的變數, 請電腦在一開始執行程式時就為該變數保留一些記憶體空間。 • 若是沒有事先宣告, 則 Flash 會在該變數第一次出現時, 才依需要分配記憶體空間給它。
宣告變數與指定變數值 • 不過有經驗的程式設計師都會建議你在使用變數前先行宣告, 這樣一方面可以確認變數的有效範圍 (請參考稍後的說明), 避免程式錯誤;另一方面, 養成這樣的好習慣, 對於日後學習其它規定更嚴格的程式語言時會很有幫助 (許多程式語言如 Java 、C...等在使用變數時必須事先宣告)。 • 以下介紹 ActionScript 中宣告變數與指定變數值的指令。
var • var指令可用來宣告變數, 位於陳述式/變數類別下, 請在變數欄輸入欲宣告的變數名稱:
var • 我們再說明以下的範例:
變數的命名規則 • ActionScript 的變數命名, 有一些重要規則需要遵守: • 雖然 Flash 可以接受任何 Unicode 文字 (包含中文), 但為了確保與其它版本的 Flash 相容, 也要確保能與其它網頁程式 (JavaScript、ASP、PHP...等) 相容, 變數名稱最好以英文命名。 • 變數名稱不能使用除了 「_」 (底線) 之外的特殊符號, 中間也不能有空格。
變數的命名規則 • 變數名稱不能使用 ActionScript 的關鍵字 (如:play、stop、goto...等), 也不能使用布林值 (true、false)。為了避開這個問題, 一般變數命名習慣使用「my」 做開頭, 後面接著第一個字母大寫的單字, 例如「myComputer」。如此一來, 即使變數命名成「myPlay」, 也不會造成程式錯誤。
變數的命名規則 • 變數沒有大小寫之分, 所以「car」、「CAR」、「Car」都會被當成同一個變數。不過為了方便辨識, 建議你統一大小寫的寫法。最好使用有意義的變數名稱, 像撰寫程式時, 存放得分的變數就可以命名為「myScore」, 而不要命名成「a1」、「a2」、「x 」 ...之類無意義的名稱, 以免日後連自己都記不清楚該變數的用途。
set variable • set variable指令是用來指定值給變數, 位於陳述式/變數類別下。它有變數與值兩個參數需要設定, 在變數欄位中輸入變數名稱;在值欄位中輸入要指定給該變數的值。
變數的有效範圍 • ActionScript 中的變數可分為時間軸變數、區域變數與全域變數3 種。大部份的時候, 我們宣告的變數都是時間軸變數;只有在函數、自訂函數 (function 指令) 中宣告的變數才屬於區域變數;至於全域變數需要在宣告變數後, 指定變數值時再特別指定:
變數的有效範圍 • 區域變數:區域變數只有在函數執行的時候才存在, 函數執行完畢後就消失。 • 時間軸變數:時間軸變數一旦經宣告後, 在哪裡都可以讀取到它, 不過必須注意它被宣告時所在的路徑階層 (請參考20-5 節), 才能正確讀取到它。 • 全域變數:全域變數和時間軸變數類似, 一旦宣告後, 不論在哪裡都可以讀取到它。差別在於全域變數不需要指定路徑也能夠讀取。
變數的有效範圍 • 以下是一個區域變數與時間軸變數的簡單範例:
變數的有效範圍 • trace輸出結果會變成 myVar1 的值為 10 , 而 myVar2 的值為 undefined (未定義)。 • 從這個結果我們可以明顯地看出, 在函數內宣告的 myVar2 是一個區域變數, 在 testVar函數執行完畢後就消失了。
文字欄位變數的應用 • 文字欄位變數是 Flash 特有的變數型態, 它直接與文字欄位 (動態文字與輸入文字) 相關聯。你可以替文字欄位設定一個專有的變數, 則變數的值就會直接顯示在該文字欄位中。以下是文字欄位變數的簡單應用: • 首先使用文字工具拉曳出一個文字物件。
文字欄位變數的應用 • 開啟屬性面板, 將文字類型設為動態文字(或輸入文字)。然後在變數欄中輸入變數名稱, 即完成變數宣告的工作。
文字欄位變數的應用 • 接著在文字欄位所在圖層上方, 建立獨立的 Actions 圖層, 然後在文字欄位所在影格的上方影格設定如下的 ActionScript , 就可以按下 [Ctrl] + [Enter] 鍵測試影片:
文字欄位變數的應用 • 相反地, 如果使用文字工具直接在該文字欄位鍵入文字, 該文字就會變成變數值, 若將文字欄位設定成輸入文字類型, 便可以讓使用者輸入資料, 做為變數值來應用。
20-2 資料類型 • 資料類型是指儲存在變數或 ActionScript 元件中的資料形式 (例如影片片段元件的寬度) , 可分為:字串、數值、布林值、Null、undefined、影片片段及物件, 以下分別進行說明。
字串 • 字串是用雙引號「" "」或單引號「' '」括起來的文字與數字, 如以下程式指定變數值時, 在文字的前後加上雙引號, 就表示指定該值的資料類型為字串:
如何得知資料類型 • 你可以用 typeof 指令 (屬於運算子/各種運算子類別) 來檢驗資料的類型, 例如我們想要得知 myData 變數中的資料類型。 • 輸出結果為 String, 即是指字串類型。
數值 • 數值包括正負整數與正負實數 (包含小數點的數字)。數值資料類型不能有英文字母、雙引號或是其它任何除了小數點「.」與負號「-」之外的特殊符號。如以下程式都是指定數值類型的資料做為變數值:
數值 • 以下是錯誤的寫法:
布林值 • 布林值類型的資料只有兩種, 一為 true (真), 一為 false (偽)。在比較運算式中, 布林值常被用來顯示結果: • 由於 10<20 ( 「<」 屬於比較運算子, 請參考 20-3 的說明) 這個運算式是成立的 (數字 10 的確小於 20) , 所以如上的程式會傳回 true 的值, 並顯示於輸出視窗中。
Null • Null 資料類型只有一個值, 就是 null, 這個值代表沒有資料, 它有一些比較特殊的應用, 例如將它當做函數的參數, 讓函數執行時忽略該參數...等。
undefined • undefined 資料類型只有一個值, 就是undefined。當變數尚未被賦予任何值時, 其預設值就是 undefined (未定義)。以下程式就是宣告變數後尚未指定其值, 就要求輸出其值, 因此得到的值就會是 undefined。
影片片段 • 影片片段資料類型是 ActionScript 中唯一具有實體圖像的資料型態, 它記錄了影片片段實體的變數、屬性 (Properties) 與方法 (Method)。在以下的程式裡, 我們把一個實體名稱為 fish 的影片片段實體 X 座標位置資料, 存入名為 myVar 的變數中:
物件 • 此處物件是指 ActionScript 中虛擬的物件, 與我們在舞台中繪製的形狀填色、線條之類的物件不同。在 Flash 的 ActionScript 中, 使用者可以創造程式中虛擬的物件, 藉以統一控制各種屬性。物件的每個屬性都有名稱和值, 而屬性的值可以是任何資料類型。
關於資料類型的轉換 • 由於 ActionScript 對於資料類型的規定並不是那麼嚴格, 因此有時候依據程式執行需要, Flash 會自動幫你做一些資料類型的轉換, 這個動作會讓某些原來看似不合理的程式能夠正常執行, 例如:
20-3 運算子 • 所謂的運算子, 就是加、減、乘、除之類的符號, 但在 ActionScript 中還有許多功能特殊的運算子, 其中有的運算子意義與數學裡的運算符號並不一致, 舉個最普通的例子, 就是「=」運算子, 在 ActionScript 中它屬於「指定運算子」 , 功用是在指定值給變數, 而不像在數學裡「=」是「等於」的意思。
運算子 • Flash 中的運算子都列在運算子類別下, 依功能分類分別是比較運算子、位元運算子、數學運算子、邏輯運算子、指定及其他運算子。以下我們僅選擇最基本的數學、比較、邏輯 3 類加以列表說明。
20-4 判斷條件與迴圈 • 判斷條件與迴圈是讓程式根據各種條件, 判斷是否執行某些程式, 或是決定程式執行順序的語法。你可以在陳述式/ 判斷條件/ 迴圈類別中找到這類指令, 以下我們僅針對最常使用的 if條件式加以詳述, 並列表補充說明其餘同類語法。
if 條件式 • if 指令的運作方式是:當判斷條件傳回值為 true 時, 執行接下來大括弧中的程式, 若傳回 false , 就不執行該程式。 • 因此 if 指令只有一個參數需要設定, 就是判斷條件, 你必須在該欄位中輸入用來判斷的運算式、變數, 而且必須注意判斷條件欄位中的運算式或變數, 必須傳回布林值 (也就是 true 或 false), 這樣 if 指令才能正常進行判斷。
if 條件式 • 再以一個簡單的範例來說明:
Flash 獨有的影格迴圈 • 前述的迴圈指令都是純程式製作的迴圈, 但是 Flash 本身含有時間軸, 故其順序播放的特性提供了另一種迴圈方式, 也就是利用 goto 指令來製造影格迴圈。 • 例如我們在第 5 格影格設定了影格動作, 又在動畫最後 1 格以 goto 指令讓動畫跳到第 3 格影格播放, 這樣動畫會一直在第 3 階到最後 1 格影格間重複播放而形成迴圈。
Flash 獨有的影格迴圈 • 迴圈中的程式, 即影格 5 的影格動作, 就會一再地被執行。不過影格迴圈會有明顯的時間差, 不像一般迴圈指令執行的頻率那麼高。
20-5 Flash 的路徑階層觀念 • 由於使用 ActionScript 操控各類實體 (影片片段、按鈕、文字) 時, 必須正確指定目標 (包含實體的路徑和名稱), 而路徑一旦錯誤, 實體就接收不到 ActionScript 的訊息, 也無法依據程式執行動作。由於 Flash 動畫的元素眾多、結構龐大, 再加上 Flash 還可以動態載入外部檔案, 所以弄清楚舞台上實體的路徑階層, 就變成使用 ActionScript 重要的基本知識之一了。
Flash 的路徑階層觀念 • 我們在第 19 章的練習中並不需要指定任何目標實體, Flash 就知道 stop 或 goto 指令是要控制整個主動畫。 • 這是因為全域函數/時間軸控制項類別下的指令, 主要就是針對整個時間軸主動畫設計的, 所以這些指令中不需要指定目標參數。
Flash 的路徑階層觀念 • 此外當你沒有指定程式的作用目標時, ActioinScript 就會把該程式所在位置的實體 (19-4 節程式所在的位置是主動畫的時間軸上) 當成作用目標。 • 有鑒於 Flash 路徑階層觀念的重要性, 以下我們詳加說明 Flash 動畫中各階層的關係, 以奠定你日後活用 ActionScript 的基礎。
階層 • 每個新開啟的 Flash 文件都有一個時間軸主動畫, 這個主動畫可以隨著影格、場景的增加一直延伸。原始的時間軸主動畫, 在 Flash 階層 (level) 中名為「_root」, 也就是根目錄動畫。在 19-4 節範例檔 19-02.fla 中, 若以指定目標的方式撰寫, 可寫成如下的程式: