consulting

39-er.jpg
Flash AS 3.0入門教程:初識AS 3.0
會員評比: / 9
最差最好 
知識庫文章 - 網站動畫設計運用知識文章

初識AS3.0

學習AS3.0已有一段時間了,想把自已對AS3的一些認識和大家分享一下。主要想說說AS3與AS2的不同之處,沒有什麼邏輯性,想到什麼就寫點什麼,因此,它不適合AS高手們閱讀。本文將力求用最直白的語言,儘量不用那些艱澀難懂的名詞和術語。


一、在什麼地方寫代碼

失望,以為要說點啥,原來是這麼小兒科的問題。沒辦法,我說過了,本文不適合AS高手閱讀的。為了更好地理解,我們還是用例子來說明。現在,就讓我們一起來回顧一下,在AS2中我們都會把代碼寫在什麼地方。我們在AS2中建一新文檔,新建一個影片剪輯元件取名為bt,元件很簡單,隨便畫一個方塊就行,你說我偏要畫一個園,那當然隨你高興羅,我沒意見。然後,在場景中,用文字工具建一文字方塊,設為動態文字方塊,實例名稱命名為:text1,將元件bt從庫中拖到舞臺上,實例名稱命名為:bt_mc.現在寫代碼,想一想,代碼寫在什麼地方,我們來做下麵三個測試:

測試一:在幀動作中,直接寫代碼,點中第一層,第一幀,然後打開動作面板,在上面寫到:
text1.text = "代碼執行了“;
測試影片,OK,我們看到了”代碼執行了“這幾個字。

測試二:還在幀動作中寫代碼,將代碼改為:
bt_mc.onPress = function() {
text1.text = "代碼執行了“;
}
測試影片,當我們點擊,元件bt_mc時,又看到了“代碼執行了”幾個字。

測試三:好象還可以把代碼寫到元件上,清除幀動作中的代碼,點中bt_mc,打開動作面板,寫下如下代碼:
on(press){
_root.text1.text = "代碼執行了“;
}
測試影片,點擊bt_mc又看到了“代碼執行了”幾個字。
它怎麼老是執行了呢,真是的。

下面我們在AS3中,作相同的測試:

測試一、在測試影片時,我們還是看到了那幾個字,它都又執行了。
那AS3和AS2不是一樣的?你還寫個啥子勁?是哈,整了半天AS3和AS2整成一樣的了。在“不到黃河心不死”的精神鼓舞下,我們還是把剩下的兩個測試做完。

測試二、在測試影片時,哈哈,出錯了,為我們出錯喝彩吧(有病!),出錯了,說明AS3與AS2還是不一樣,那麼本文就還可以寫下去了。

測試三、當我們點中bt_mc,然後打開動作面板時,我們看到的是:“無法將動作應用於當前所選內容”真是過分,它連測試的機會都不給你。

好了,測試做完了,所謂實踐出真知,通過測試,我們可以得出如下結論:在AS2中,我們可以把代碼寫在幀動作中,也可以寫在影片剪輯、按鈕等元件上。在AS3中,我們只能把代碼寫在幀動作中。(當然也可以寫在.as等外部文件中,然後將它導入進來)。


二、AS3中的事件偵聽

看到這裡,聰明的你一定會說,在AS3中做上面的測試二時,代碼是寫在幀動作中的啊,為什麼會出錯呢?是啊,正因為有你的聰明,才使本文可以繼續寫下去啊。在AS2中我們在讓程式響應一個事件,比如滑鼠按一下,我們可以在幀動作中這樣寫:
事件物件.onPress = function() { 語句}
在AS3中,就不能這樣寫了,所以上面的測試二就出錯了。
在AS3中,你必須先聲明一個函數,其中包含你要執行的語句,然後用事件物件來偵聽事件並調用這個函數,這將用到事件偵聽語句:addEventListener無論何時編寫事件偵聽器代碼,該代碼都會採用以下基本結構(以粗體顯示的元素是預留位置,您將針對具體情況對其進行填寫):
function eventResponse(eventObject:EventType):void
(函數名稱) (事件類型)
{
// 此處是為回應事件而執行的動作。
}
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

(事件物件) (事件類型.名稱 函數名稱)
我想還是用測試二,來說明好理解一些:
在AS3中,將測試二中幀動作代碼改為:
function test(event:MouseEvent):void  //先聲明一個函數test,其中包含了要執行的代碼。
{
text1.text = "代碼執行了";
}
bt_mc.addEventListener(MouseEvent.CLICK,test)  //然後,用bt_mc元件來偵聽事件,並調用test
測試影片,哈哈,代碼它終於執行了。
上述代碼中的事件類型是:滑鼠事件(MouseEvent),事件名稱是:按一下(CLICK)。
你又要說話了,“這不是更麻煩嗎?”,是有點麻煩哈,不過據說是更規範,更利於代碼維護,不過不管你願不願意,你要用AS3你就得這麼寫。


三、添加顯示物件

這一節,來說說顯示物件。顯示物件?啥玩眼,你不是說不用專業術語嗎?這個簡單,你在舞臺上能看到的東西就叫顯示物件。你說顯示物件是咋個到舞臺上去的呢?你傻哦,當然是放上去的囉。那它是咋個放上去的呢?當然是用滑鼠放上去麻。那只有用滑鼠才能放上去嗎?那不一定,我還以用attachMovie從庫裡頭載入一個,我也可以用duplicateMovieClip複製一個,高興了,我還可以用代碼畫一個,我還可以用loadMovie導入一個外部檔。你耐我何?真的嗎?你敢不敢試一下嗎?試就試,誰怕誰? 

先試attachMovie:在AS3中在幀動作中寫如下代碼:
attachMovie ("bt","bt1",1)
測試影片,出錯了。我們知道,這在AS2中是不會出錯的,而且會將庫中的“bt"元件,載入一個到舞臺上。
還在那寫文章,要載入庫裡的元件,必須要在元件的連結屬性中為元件指定識別字,這一步你都不曉得?是哈,咋把這一步給忘了,趕緊去設置,在庫中,bt原件上按一下右鍵,點連結,選中“ActionSpript匯出“,再看”標示符“那一欄,不能用!你能幹,你來設麻。
其實,在AS3中根本就沒有attachMovie這一說。
現在試一下:duplicateMovieClip:將代碼改為:
duplicateMovieClip ("bt_mc","bt1",1)
bt1._x = 300;
測試影片,又出錯了。同樣的,AS3中也沒有duplicateMovieClip這一說。
畫一個?畫麻:將代碼改為:
1. createEmptyMovieClip("bt1",0);
2. with (bt1) {
3. beginFill(0xFF0000);
4. moveTo(100,0);
5. lineTo(200,100);
6. lineTo(0,100);
7. lineTo(100,0)
8. endFill();
9. }
測試影片,還是出錯了。而這幾句代碼在AS2中會畫出一個紅色的三角形。
在AS3中,載入一個顯示物件,必須用new關鍵字來構造,要在舞臺上看到它,還必須用addChild()將它加到顯示清單中才行。
還是來做個實例吧,我們將庫中的bt元件,載入到舞臺上:
首先我們在庫中,在bt元件上,點右鍵-連結,選中,“為ActionScript匯出“,這時”類“和”基類“兩欄均變為可用。這樣,就在flash.display.MovieClip類中創建了一個”bt"類。點擊確定,在接下彈出的對話方塊中,再點確定,就行了。
現在我們可以在代碼中載入bt了
var bt1:bt = new(bt); //聲明一個新的bt類的實例,並用new()來構造它
this.addChild(bt1);  //將bt1載到舞臺
bt1.x =200;
bt1.y=300;  //設置bt1的x,y值,注意在AS3中,x和y前而沒有底線了。
測試影片,bt已載入到舞臺上了。
下面我們在AS3中畫一個,代碼這樣寫:
var bt1:MovieClip = new(MovieClip); //聲明一個新的mc類bt1,並用new來構造它
bt1.graphics.lineStyle(2, 0x990000, .75);//使用bt1的graphics屬性設置線條粗細,顏色,透明度
1. bt1.graphics.beginFill(0x00FF00);//以下的代碼是用graphics畫三角形。
2. bt1.graphics.moveTo(100,200);
3. bt1.graphics.lineTo(200,100);
4. bt1.graphics.lineTo(0,100);
5. bt1.graphics.lineTo(100,200);
6. this.addChild(bt1);
在AS3中,除了MovieClip類外,還可以用Shape、Sprite 類來繪圖或載入顯示物件,而且還要更節約系統資源一些。
載入外部顯示物件,在AS3中,利用Loader類來載入外部物件;同樣的也要先聲明一個Loader類實例:
1. var loadpict:Loader = new(Loader);
2. var pictURLReq:URLRequest = new URLRequest(pictURL);//pictURL為外部檔的路徑
3. loadpict.load(pictURLReq);
4. this.addChild(loadpict);
好了,暫時寫這麼多,如果想起了什麼,再補充。

(此篇文章為網路轉載,如有冒犯,請來信告知,當即刻移除!)