本節將使用 Flash 組件和 Flash 編寫工具,逐步引導您完成建立一個簡單的 ActionScript 3.0 應用程式所需的步驟。範例以兩種檔案形式提供,一種是 FLA 檔,另一種則是外部 ActionScript 類別檔案;前者在「時間軸」上含有 ActionScript 程式碼,後者則具有只將組件包含在元件庫中的 FLA 檔。一般而言,外部類別檔案是用於開發大型應用程式,可以在類別和應用程式之間共用程式碼,讓應用程式的維護工作更容易。如需有關使用 ActionScript 3.0 撰寫程式的詳細資訊,請參閱「ActionScript 3.0 程式設計」。
應用程式設計
我們的第一個 ActionScript 組件應用程式範例是標準「Hello World」應用程式的變化,因此它的設計方式是相當簡單的:
-
應用程式的名稱是 Greetings。
-
它會使用 TextArea 起先顯示一段問候語 Hello World。
-
它會使用 ColorPicker 讓您可以變更文字的顏色。
-
它會使用三個 RadioButton 讓您可以將文字的大小設定為小、較大或最大。
-
它會使用 ComboBox 讓您可以從下拉式清單選取不同的問候語。
-
應用程式會使用「組件」面板中的組件,同時也會利用 ActionScript 程式碼建立應用程式元素。
完成定義後,就可以開始建置應用程式。
建立 Greetings 應用程式
下列建立 Greetings 應用程式的步驟是使用 Flash 編寫工具建立 FLA 檔、將組件放到「舞台」上,然後將 ActionScript 程式碼加入到時間軸。
在 FLA 檔中建立 Greetings 應用程式:
-
請選取「檔案 > 新增」。
-
在「新增文件」對話方塊中選取「Flash 檔案 (ActionScript 3.0)」,然後按一下「確定」。
新的 Flash 視窗隨即開啟。
-
選取「檔案 > 儲存檔案」、將 Flash 檔案命名為
Greetings.fla
,再按一下「儲存」按鈕。
-
在「Flash 組件」面板中,選取 TextArea 組件並將它拖曳到「舞台」上。
-
當「舞台」上的 TextArea 已選取的情況下,在「屬性」視窗中輸入
aTa
做為實體名稱,然後輸入下列資訊:
-
將 ColorPicker 組件拖曳到「舞台」上放在 TextArea 的左邊,然後將它的實體名稱設定為
txtCp
。在「屬性」檢測器中輸入下列資訊:
-
輸入
96
做為 X 值。
-
輸入
72
做為 Y 值。
-
逐一將三個 RadioButton 組件拖曳到「舞台」上,並將它們的實體名稱設定為
smallRb
、
largerRb
和
largestRb
。在「屬性」檢測器中為它們輸入下列資訊:
-
分別輸入
100
和
22
做為這三個組件的 W 值和 H 值。
-
輸入
155
做為 X 值。
-
分別輸入
120
、
148
和
175
做為 smallRb、largerRb 和 largestRb 的 Y 值。
-
輸入
fontRbGrp
做為這三個組件的 groupName 參數。
-
在「參數」索引標籤中,分別輸入
Small
、
Larger
和
Largest
做為這三個組件的標籤。
-
將 ComboBox 組件拖曳到「舞台」上,並賦予它一個實體名稱
msgCb
。在「屬性」檢測器中為它輸入下列資訊:
-
輸入
130
做為 W 值。
-
輸入
265
做為 X 值。
-
輸入
120
做為 Y 值。
-
在「參數」索引標籤中,輸入
Greetings
做為 prompt 參數。
-
按兩下 dataProvider 參數的文字欄位以開啟「值」對話方塊。
-
按一下加號,以
Hello World!
取代標籤值。
-
重複上一個步驟,加入標籤值
Have a nice day!
和
Top of the Morning!
。
-
按一下「確定」,關閉「值」對話方塊。
-
儲存檔案。
-
如果沒有開啟「動作」面板,請按
F9
或從「視窗」選單中選取「動作」將它開啟。在主要「時間軸」上按一下「影格 1」,並在「動作」面板中輸入下列程式碼:
import flash.events.Event;
import fl.events.ComponentEvent;
import fl.events.ColorPickerEvent;
import fl.controls.RadioButtonGroup;
var rbGrp:RadioButtonGroup = RadioButtonGroup.getGroup("fontRbGrp");
rbGrp.addEventListener(MouseEvent.CLICK, rbHandler);
txtCp.addEventListener(ColorPickerEvent.CHANGE,cpHandler);
msgCb.addEventListener(Event.CHANGE, cbHandler);
前三行程式碼會匯入應用程式所使用的事件類別。當使用者與其中一個組件進行互動時就會產生事件。底下五行程式碼會為應用程式要偵聽的事件註冊事件處理常式。當使用者按一下 RadioButton 時就會產生它的
click
事件。當使用者在 ColorPicker 中選取不同的顏色時就會產生
change
事件。當使用者從下拉式清單選擇不同的問候語時就會產生 ComboBox 的
change
事件。
第四行程式碼會匯入 RadioButtonGroup 類別讓應用程式可以將事件偵聽程式指定給 RadioButton 的群組,而不是個別將偵聽程式指定給每一個按鈕。
-
將下列程式碼行加入到「動作」面板以建立
tf
TextFormat 物件,讓應用程式可以使用它來變更 TextArea 中文字的
size
和
color
樣式屬性。
var tf:TextFormat = new TextFormat();
-
加入下列程式碼以建立
rbHandler
事件處理函數。這個函數會在使用者按一下其中一個 RadioButton 組件後處理產生的
click
事件。
function rbHandler(event:MouseEvent):void {
switch(event.target.selection.name) {
case "smallRb":
tf.size = 14;
break;
case "largerRb":
tf.size = 18;
break;
case "largestRb":
tf.size = 24;
break;
}
aTa.setStyle("textFormat", tf);
}
這個函數會使用
switch
陳述式檢查
event
物件的
target
屬性,判斷觸發事件的是哪一個 RadioButton。
currentTarget
屬性含有觸發事件之物件的名稱。應用程式會根據使用者按下的 RadioButton 將 TextArea 中的文字大小變更為 14、18 或 24 點。
-
加入下列程式碼來實作
cpHandler()
函數,處理 ColorPicker 中值的變更動作:
function cpHandler(event:ColorPickerEvent):void {
tf.color = event.target.selectedColor;
aTa.setStyle("textFormat", tf);
}
這個函數會將
tf
TextFormat 物件的
color
屬性設定為 ColorPicker 中選取的顏色,然後呼叫
setStyle()
將該顏色套用到
aTa
TextArea 實體中的文字。
-
加入下列程式碼來實作
cbHandler()
函數,以處理對 ComboBox 中選取範圍所做的變更:
function cbHandler(event:Event):void {
aTa.text = event.target.selectedItem.label;
}
這個函數只會以 ComboBox 中選取的文字
event.target.selectedItem.label
取代 TextArea 中的文字。
-
選取「控制 > 測試影片」或按 Control+Enter 鍵,編譯程式碼並測試 Greetings 應用程式。
下一節將說明如何使用外部 ActionScript 類別和 FLA 檔 (在元件庫中只含有必要的組件) 建置相同的應用程式。
使用外部類別檔案建立 Greetings2 應用程式:
-
請選取「檔案 > 新增」。
-
在「新增文件」對話方塊中選取「Flash 檔案 (ActionScript 3.0)」,然後按一下「確定」。
新的 Flash 視窗隨即開啟。
-
選取「檔案 > 儲存檔案」、將 Flash 檔案命名為
Greetings2.fla
,再按一下「儲存」按鈕。
-
將下列組件從「組件」面板拖曳到元件庫:
-
在「屬性」視窗的「文件類別」中,輸入
Greetings2
。
如果 Flash 顯示「找不到文件類別的定義」警告訊息,請忽略它。您將會在下列步驟中定義 Greetings2 類別。這個類別會定義應用程式主要的功能。
-
儲存 Greetings2.fla 檔案。
-
選取「檔案 > 新增」。
-
在「新增文件」對話方塊中選取「ActionScript 檔案」,然後按一下「確定」。
會開啟新的 Script 視窗。
-
在 Script 視窗中輸入下列程式碼:
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextFormat;
import fl.events.ComponentEvent;
import fl.events.ColorPickerEvent;
import fl.controls.ColorPicker;
import fl.controls.ComboBox;
import fl.controls.RadioButtonGroup;
import fl.controls.RadioButton;
import fl.controls.TextArea;
public class Greetings2 extends Sprite {
private var aTa:TextArea;
private var msgCb:ComboBox;
private var smallRb:RadioButton;
private var largerRb:RadioButton;
private var largestRb:RadioButton;
private var rbGrp:RadioButtonGroup;
private var txtCp:ColorPicker;
private var tf:TextFormat = new TextFormat();
public function Greetings2() {
此 Script 會定義一個名為 Greetings2 的 ActionScript 3.0 類別。Script 會執行下列動作:
-
匯入檔案中將使用的類別。一般的作法是在程式碼中參考到不同類別時,才會加入這些
import
陳述式,但為簡潔起見,範例在這一個步驟中就會將它們全部匯入。
-
宣告變數,表示將加入到程式碼的不同組件物件類型。另一個變數則會建立
tf
TextFormat 物件。
-
定義類別的建構函數
Greetings2()
。下列步驟會繼續將程式碼行加入這個函數,也會將其它方法加入到類別。
-
選取「檔案 > 儲存檔案」,將檔案命名為
Greetings2.as
,然後按一下「儲存」按鈕。
-
將下列程式碼行加入到
Greeting2()
函數:
createUI();
setUpHandlers();
}
函數現在看起來會像下面這樣:
public function Greetings2() {
createUI();
setUpHandlers();
}
-
將下列各行程式碼加入到
Greeting2()
方法的右大括弧後面:
private function createUI() {
bldTxtArea();
bldColorPicker();
bldComboBox();
bldRadioButtons();
}
private function bldTxtArea() {
aTa = new TextArea();
aTa.setSize(230, 44);
aTa.text = "Hello World!";
aTa.move(165, 57);
addChild(aTa);
}
private function bldColorPicker() {
txtCp = new ColorPicker();
txtCp.move(96, 72);
addChild(txtCp);
}
private function bldComboBox() {
msgCb = new ComboBox();
msgCb.width = 130;
msgCb.move(265, 120);
msgCb.prompt = "Greetings";
msgCb.addItem({data:"Hello.", label:"English"});
msgCb.addItem({data:"Bonjour.", label:"Français"});
msgCb.addItem({data:"¡Hola!", label:"Español"});
addChild(msgCb);
}
private function bldRadioButtons() {
rbGrp = new RadioButtonGroup("fontRbGrp");
smallRb = new RadioButton();
smallRb.setSize(100, 22);
smallRb.move(155, 120);
smallRb.group = rbGrp; //"fontRbGrp";
smallRb.label = "Small";
smallRb.name = "smallRb";
addChild(smallRb);
largerRb = new RadioButton();
largerRb.setSize(100, 22);
largerRb.move(155, 148);
largerRb.group = rbGrp;
largerRb.label = "Larger";
largerRb.name = "largerRb";
addChild(largerRb);
largestRb = new RadioButton();
largestRb.setSize(100, 22);
largestRb.move(155, 175);
largestRb.group = rbGrp;
largestRb.label = "Largest";
largestRb.name = "largestRb";
addChild(largestRb);
}
這些程式碼行會執行下列動作:
-
在
bldRadioButtons()
方法的右大括弧之後,加入下列
setUpHandlers()
方法的程式碼:
private function setUpHandlers():void {
rbGrp.addEventListener(MouseEvent.CLICK, rbHandler);
txtCp.addEventListener(ColorPickerEvent.CHANGE,cpHandler);
msgCb.addEventListener(Event.CHANGE, cbHandler);
}
private function rbHandler(event:MouseEvent):void {
switch(event.target.selection.name) {
case "smallRb":
tf.size = 14;
break;
case "largerRb":
tf.size = 18;
break;
case "largestRb":
tf.size = 24;
break;
}
aTa.setStyle("textFormat", tf);
}
private function cpHandler(event:ColorPickerEvent):void {
tf.color = event.target.selectedColor;
aTa.setStyle("textFormat", tf);
}
private function cbHandler(event:Event):void {
aTa.text = event.target.selectedItem.data;
}
}
}
這些函數會定義組件的事件偵聽程式。
-
選取「檔案 > 儲存檔案」進行存檔。
-
選取「控制 > 測試影片」或按 Control+Enter 鍵,編譯程式碼並測試 Greetings2 應用程式。
撰寫並執行後續的範例
撰寫並執行 Greetings 應用程式後,您應該已對如何執行本手冊中的其它程式碼範例有了基本的認識。每個範例中相關的 ActionScript 3.0 程式碼都會以反白標示並附上討論,您可以剪下本手冊中的每個範例內容,然後將它貼入 FLA 檔、編譯並執行。
|
|
|