第
This presentation is the property of its rightful owner.
Sponsored Links
1 / 66

第 20 章 PowerPoint PPT Presentation


  • 76 Views
  • Uploaded on
  • Presentation posted in: General

第 20 章. ActionScript 指令與語法. 本章提要. 20-1 變數與變數範圍 20-2 資料類型 20-3 運算子 20-4 判斷條件與迴圈 20-5 Flash 的路徑階層觀念. 20-1 變數與變數範圍. 變數 是用來讓程式暫存資料的 , 變數中所存的資料就叫做變數的「值」 , 變數的值可以是字串、數字、布林值 ... 等資料 ( 關於資料型態請參考 20-2 節 ) 。在使用變數時 , 必須要注意變數的有效範圍 , 否則可能造成程式運作結果錯誤。

Download Presentation

第 20 章

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


20

第 20 章

ActionScript 指令與語法


20

本章提要

  • 20-1 變數與變數範圍

  • 20-2 資料類型

  • 20-3 運算子

  • 20-4 判斷條件與迴圈

  • 20-5 Flash 的路徑階層觀念


20

20-1 變數與變數範圍

  • 變數是用來讓程式暫存資料的, 變數中所存的資料就叫做變數的「值」, 變數的值可以是字串、數字、布林值...等資料 (關於資料型態請參考 20-2 節)。在使用變數時, 必須要注意變數的有效範圍, 否則可能造成程式運作結果錯誤。

  • 由於在 Flash 中, 變數常應用在顯示文字方面, 所以 Flash 有一種特別的變數型態, 叫做文字欄位變數, 這種變數可從屬性面板設定, 使用起來十分簡單方便。


20

宣告變數與指定變數值

  • 在 ActionScript 中不需要事先宣告也可以直接使用變數。事先宣告變數的意思是指, 以 var 指令告訴 Flash, 程式待會兒需要使用這個名稱的變數, 請電腦在一開始執行程式時就為該變數保留一些記憶體空間。

  • 若是沒有事先宣告, 則 Flash 會在該變數第一次出現時, 才依需要分配記憶體空間給它。


20

宣告變數與指定變數值

  • 不過有經驗的程式設計師都會建議你在使用變數前先行宣告, 這樣一方面可以確認變數的有效範圍 (請參考稍後的說明), 避免程式錯誤;另一方面, 養成這樣的好習慣, 對於日後學習其它規定更嚴格的程式語言時會很有幫助 (許多程式語言如 Java 、C...等在使用變數時必須事先宣告)。

  • 以下介紹 ActionScript 中宣告變數與指定變數值的指令。


20

var

  • var指令可用來宣告變數, 位於陳述式/變數類別下, 請在變數欄輸入欲宣告的變數名稱:


20

var


20

var

  • 我們再說明以下的範例:


20

變數的命名規則

  • ActionScript 的變數命名, 有一些重要規則需要遵守:

  • 雖然 Flash 可以接受任何 Unicode 文字 (包含中文), 但為了確保與其它版本的 Flash 相容, 也要確保能與其它網頁程式 (JavaScript、ASP、PHP...等) 相容, 變數名稱最好以英文命名。

  • 變數名稱不能使用除了 「_」 (底線) 之外的特殊符號, 中間也不能有空格。


20

變數的命名規則

  • 變數名稱不能使用 ActionScript 的關鍵字 (如:play、stop、goto...等), 也不能使用布林值 (true、false)。為了避開這個問題, 一般變數命名習慣使用「my」 做開頭, 後面接著第一個字母大寫的單字, 例如「myComputer」。如此一來, 即使變數命名成「myPlay」, 也不會造成程式錯誤。


20

變數的命名規則

  • 變數沒有大小寫之分, 所以「car」、「CAR」、「Car」都會被當成同一個變數。不過為了方便辨識, 建議你統一大小寫的寫法。最好使用有意義的變數名稱, 像撰寫程式時, 存放得分的變數就可以命名為「myScore」, 而不要命名成「a1」、「a2」、「x 」 ...之類無意義的名稱, 以免日後連自己都記不清楚該變數的用途。


Set variable

set variable

  • set variable指令是用來指定值給變數, 位於陳述式/變數類別下。它有變數與值兩個參數需要設定, 在變數欄位中輸入變數名稱;在值欄位中輸入要指定給該變數的值。


Set variable1

set variable


Set variable2

set variable


20

變數的有效範圍

  • ActionScript 中的變數可分為時間軸變數、區域變數與全域變數3 種。大部份的時候, 我們宣告的變數都是時間軸變數;只有在函數、自訂函數 (function 指令) 中宣告的變數才屬於區域變數;至於全域變數需要在宣告變數後, 指定變數值時再特別指定:


20

變數的有效範圍

  • 區域變數:區域變數只有在函數執行的時候才存在, 函數執行完畢後就消失。

  • 時間軸變數:時間軸變數一旦經宣告後, 在哪裡都可以讀取到它, 不過必須注意它被宣告時所在的路徑階層 (請參考20-5 節), 才能正確讀取到它。

  • 全域變數:全域變數和時間軸變數類似, 一旦宣告後, 不論在哪裡都可以讀取到它。差別在於全域變數不需要指定路徑也能夠讀取。


20

變數的有效範圍

  • 以下是一個區域變數與時間軸變數的簡單範例:


20

變數的有效範圍

  • trace輸出結果會變成 myVar1 的值為 10 , 而 myVar2 的值為 undefined (未定義)。

  • 從這個結果我們可以明顯地看出, 在函數內宣告的 myVar2 是一個區域變數, 在 testVar函數執行完畢後就消失了。


20

文字欄位變數的應用

  • 文字欄位變數是 Flash 特有的變數型態, 它直接與文字欄位 (動態文字與輸入文字) 相關聯。你可以替文字欄位設定一個專有的變數, 則變數的值就會直接顯示在該文字欄位中。以下是文字欄位變數的簡單應用:

  • 首先使用文字工具拉曳出一個文字物件。


20

文字欄位變數的應用

  • 開啟屬性面板, 將文字類型設為動態文字(或輸入文字)。然後在變數欄中輸入變數名稱, 即完成變數宣告的工作。


20

文字欄位變數的應用

  • 接著在文字欄位所在圖層上方, 建立獨立的 Actions 圖層, 然後在文字欄位所在影格的上方影格設定如下的 ActionScript , 就可以按下 [Ctrl] + [Enter] 鍵測試影片:


20

文字欄位變數的應用


20

文字欄位變數的應用

  • 相反地, 如果使用文字工具直接在該文字欄位鍵入文字, 該文字就會變成變數值, 若將文字欄位設定成輸入文字類型, 便可以讓使用者輸入資料, 做為變數值來應用。


20

20-2 資料類型

  • 資料類型是指儲存在變數或 ActionScript 元件中的資料形式 (例如影片片段元件的寬度) , 可分為:字串、數值、布林值、Null、undefined、影片片段及物件, 以下分別進行說明。


20

字串

  • 字串是用雙引號「" "」或單引號「' '」括起來的文字與數字, 如以下程式指定變數值時, 在文字的前後加上雙引號, 就表示指定該值的資料類型為字串:


20

如何得知資料類型

  • 你可以用 typeof 指令 (屬於運算子/各種運算子類別) 來檢驗資料的類型, 例如我們想要得知 myData 變數中的資料類型。

  • 輸出結果為 String, 即是指字串類型。


20

數值

  • 數值包括正負整數與正負實數 (包含小數點的數字)。數值資料類型不能有英文字母、雙引號或是其它任何除了小數點「.」與負號「-」之外的特殊符號。如以下程式都是指定數值類型的資料做為變數值:


20

數值

  • 以下是錯誤的寫法:


20

布林值

  • 布林值類型的資料只有兩種, 一為 true (真), 一為 false (偽)。在比較運算式中, 布林值常被用來顯示結果:

  • 由於 10<20 ( 「<」 屬於比較運算子, 請參考 20-3 的說明) 這個運算式是成立的 (數字 10 的確小於 20) , 所以如上的程式會傳回 true 的值, 並顯示於輸出視窗中。


20

Null

  • Null 資料類型只有一個值, 就是 null, 這個值代表沒有資料, 它有一些比較特殊的應用, 例如將它當做函數的參數, 讓函數執行時忽略該參數...等。


Undefined

undefined

  • undefined 資料類型只有一個值, 就是undefined。當變數尚未被賦予任何值時, 其預設值就是 undefined (未定義)。以下程式就是宣告變數後尚未指定其值, 就要求輸出其值, 因此得到的值就會是 undefined。


20

影片片段

  • 影片片段資料類型是 ActionScript 中唯一具有實體圖像的資料型態, 它記錄了影片片段實體的變數、屬性 (Properties) 與方法 (Method)。在以下的程式裡, 我們把一個實體名稱為 fish 的影片片段實體 X 座標位置資料, 存入名為 myVar 的變數中:


20

物件

  • 此處物件是指 ActionScript 中虛擬的物件, 與我們在舞台中繪製的形狀填色、線條之類的物件不同。在 Flash 的 ActionScript 中, 使用者可以創造程式中虛擬的物件, 藉以統一控制各種屬性。物件的每個屬性都有名稱和值, 而屬性的值可以是任何資料類型。


20

關於資料類型的轉換

  • 由於 ActionScript 對於資料類型的規定並不是那麼嚴格, 因此有時候依據程式執行需要, Flash 會自動幫你做一些資料類型的轉換, 這個動作會讓某些原來看似不合理的程式能夠正常執行, 例如:


20

20-3 運算子

  • 所謂的運算子, 就是加、減、乘、除之類的符號, 但在 ActionScript 中還有許多功能特殊的運算子, 其中有的運算子意義與數學裡的運算符號並不一致, 舉個最普通的例子, 就是「=」運算子, 在 ActionScript 中它屬於「指定運算子」 , 功用是在指定值給變數, 而不像在數學裡「=」是「等於」的意思。


20

運算子

  • Flash 中的運算子都列在運算子類別下, 依功能分類分別是比較運算子、位元運算子、數學運算子、邏輯運算子、指定及其他運算子。以下我們僅選擇最基本的數學、比較、邏輯 3 類加以列表說明。


20

數學運算子


20

比較運算子


20

邏輯運算子


20

20-4 判斷條件與迴圈

  • 判斷條件與迴圈是讓程式根據各種條件, 判斷是否執行某些程式, 或是決定程式執行順序的語法。你可以在陳述式/ 判斷條件/ 迴圈類別中找到這類指令, 以下我們僅針對最常使用的 if條件式加以詳述, 並列表補充說明其餘同類語法。


20

if 條件式

  • if 指令的運作方式是:當判斷條件傳回值為 true 時, 執行接下來大括弧中的程式, 若傳回 false , 就不執行該程式。

  • 因此 if 指令只有一個參數需要設定, 就是判斷條件, 你必須在該欄位中輸入用來判斷的運算式、變數, 而且必須注意判斷條件欄位中的運算式或變數, 必須傳回布林值 (也就是 true 或 false), 這樣 if 指令才能正常進行判斷。


20

if 條件式


20

if 條件式

  • 再以一個簡單的範例來說明:


20

其他常用判斷條件或迴圈指令


Flash

Flash 獨有的影格迴圈

  • 前述的迴圈指令都是純程式製作的迴圈, 但是 Flash 本身含有時間軸, 故其順序播放的特性提供了另一種迴圈方式, 也就是利用 goto 指令來製造影格迴圈。

  • 例如我們在第 5 格影格設定了影格動作, 又在動畫最後 1 格以 goto 指令讓動畫跳到第 3 格影格播放, 這樣動畫會一直在第 3 階到最後 1 格影格間重複播放而形成迴圈。


Flash1

Flash 獨有的影格迴圈

  • 迴圈中的程式, 即影格 5 的影格動作, 就會一再地被執行。不過影格迴圈會有明顯的時間差, 不像一般迴圈指令執行的頻率那麼高。


20 5 flash

20-5 Flash 的路徑階層觀念

  • 由於使用 ActionScript 操控各類實體 (影片片段、按鈕、文字) 時, 必須正確指定目標 (包含實體的路徑和名稱), 而路徑一旦錯誤, 實體就接收不到 ActionScript 的訊息, 也無法依據程式執行動作。由於 Flash 動畫的元素眾多、結構龐大, 再加上 Flash 還可以動態載入外部檔案, 所以弄清楚舞台上實體的路徑階層, 就變成使用 ActionScript 重要的基本知識之一了。


Flash2

Flash 的路徑階層觀念

  • 我們在第 19 章的練習中並不需要指定任何目標實體, Flash 就知道 stop 或 goto 指令是要控制整個主動畫。

  • 這是因為全域函數/時間軸控制項類別下的指令, 主要就是針對整個時間軸主動畫設計的, 所以這些指令中不需要指定目標參數。


Flash3

Flash 的路徑階層觀念

  • 此外當你沒有指定程式的作用目標時, ActioinScript 就會把該程式所在位置的實體 (19-4 節程式所在的位置是主動畫的時間軸上) 當成作用目標。

  • 有鑒於 Flash 路徑階層觀念的重要性, 以下我們詳加說明 Flash 動畫中各階層的關係, 以奠定你日後活用 ActionScript 的基礎。


20

階層

  • 每個新開啟的 Flash 文件都有一個時間軸主動畫, 這個主動畫可以隨著影格、場景的增加一直延伸。原始的時間軸主動畫, 在 Flash 階層 (level) 中名為「_root」, 也就是根目錄動畫。在 19-4 節範例檔 19-02.fla 中, 若以指定目標的方式撰寫, 可寫成如下的程式:


20

階層


20

階層

  • 這個原始的時間軸主動畫 _root, 也稱為_level0。既然有 _level0 (第 0 階層), 那麼就有 _level1、_level2。例如當你利用 loadMovie 指令 (在全域函數/瀏覽器/網路類別下) 動態載入外部 Flash 影片檔 (.swf) 到目前所在動畫中, 就可以指定要將這個 .swf 檔載入哪一階層。


20

階層


20

階層

  • Flash 動畫的每個階層都有獨立的時間軸, 而且每個階層只能有一個時間軸主動畫, 若你將 .swf 檔載入已有時間軸主動畫的階層中 (例如 _level0), 則後載入者將把原始存在的動畫取代掉。


20

階層

  • 由於每個階層都有獨立的時間軸, 所以每個階層的時間軸主動畫都稱為 _root。舉例來說, 如果你在 _level1 主動畫設定 「_root.stop();」, 因為沒有指定是哪一個階層, 所以停止播放的將是 _level1 的時間軸主動畫;若設定的程式為特別指定 level0 的 「_level0.stop();」 , 那麼停止播放的將會是 _level0 的時間軸主動畫。


20

實體目標路徑與深度

  • 在第 6 章我們介紹過, 舞台中的實體 (影片片段、按鈕、文字) 可以命名好讓 ActionScript 控制, 而舞台中的實體除了名稱之外, 還有一個深度(depth) 屬性。

  • 實體的深度就是該實體所在位置的高低 (亦即 Z 軸位置, 可以有負值), 不同的實體原則上不可以存在於同一個深度。


20

實體目標路徑與深度

  • 例如以 duplicateMovieClip或attachMovie等指令即時複製或載入影片片段實體時, 必須指定載入的深度, 若將不同實體載入同一深度, 則後載入的實體將會把前者取代掉。

  • 不過若是利用swapDepths指令切換既有實體到同一深度, 則 Flash 將用所在圖層與浮動層順序來決定誰在上方。


20

實體目標路徑與深度

  • 雖然階層和深度都同樣是表示層級, 但實體的深度都只會在1 個階層中呈現, 所以深度的層級只是在階層中再細分的層級。我們以下圖來解說階層到實體深度的整體關係:


20

實體目標路徑與深度


20

指定目標時的絕對路徑與相對路徑

  • 在 ActionScript 中指定作用目標時, 還有絕對路徑和相對路徑兩種形式, 而ActionScript 所在位置對路徑標記也有影響。我們以 ActionScript 2.0 類別/影片/MovieClip/方法下的 gotoAndStop指令為例來解說:


20

指定目標時的絕對路徑與相對路徑


20

指定目標時的絕對路徑與相對路徑


20

指定目標時的絕對路徑與相對路徑


20

指定目標時的絕對路徑與相對路徑

  • 一般來說, 使用絕對路徑標記比較容易, 也比較不容易出錯, 但是當動畫中使用loadMovie指令, 以指定目標路徑的方式載入含有 ActionScript 的.swf 檔時, 該檔內又使用絕對路徑標記時, 就會造成路徑錯誤, 使程式無法正常執行。所以到底哪種標記模式較好並沒有定論, 你必須依照自己的需要選用。

  • 我們再來說明絕對路徑與相對路徑的範例:


20

指定目標時的絕對路徑與相對路徑


20

指定目標時的絕對路徑與相對路徑


  • Login