AS3.0教程:強大的事件機制(2)

 [1b]如何接收事件?如何做到AS3.0的標準事件編程?[/1b]
Event改變的部分很多,這兩天有空時,
[url=http://www.kingda.org/]
[color="#c49b2f"]黑羽[/color]
[/url]
就在想怎樣用一個有條理的方式來講解Event和它相關的諸多內容,讓我們感到比較容易理解,記憶和接受。
我準備這樣來講解:
先給個接受事件的代碼例子。在例子中,指出:
(1) Event對象發生了什麼變化
(2) addEventListener語法的不同,原因,和const型必要性和用法
(3) Listener和As2.0有何不同,和this關鍵字的“改進了的記憶力”
[url=http://www.kingda.org/]
[color="#c49b2f"]黑羽[/color]
[/url]
一貫的風格,先來一個例子。我很想給個短一點的代碼例子,但是要達到清楚,全面和標準的示範,我還是決定採用這個Document Class的示例。我會在每個代碼段注一些註釋,大家不明白的地方回貼說一下,我會盡量解答。
Document Class的含義和相關用法並不難,忘了的兄弟看我第3篇教程:
[url=http://www.kingda.org/archives/kingda/2006/07/as303document_class.html]
[color="#c49b2f"]AS3.0教程(3):Document Class特色爲我們帶來了什麼?[/color]
[/url]
好,come on baby.
新建一個as文件,拷貝以下代碼,命名爲AddListener.as。
新建一個fla,命名爲 "黑羽黑羽我愛你.fla"(本教程推薦使用,倘若不遵從可能導致喝涼水塞牙泡MM被踢炒股被套等嚴重後果,霍哈哈。Just kidding。)。設置它的文檔類(Document Class)爲AddListener.
//【黑羽】ActionScript 3.0系列教程(6)
//http://www.kingda.org
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
//哈哈,看到了沒,Document Class不僅可以擴展MovieClip,也可以擴展Sprite
//package裏面的類名要和文件名相同
public class AddListener extends Sprite {
public function AddListener() { 
//用package外面定義的類KingdaSprite創建一個實例,由於同文件中,所以不用import啦
var outsideChild:KingdaSprite = new KingdaSprite(0x00FF00, "outside_sprite");
addChild(outsideChild);//沒有了這一句,你啥都看不到。
outsideChild.addEventListener(MouseEvent.CLICK, inclassHandler);//註冊類裏面的偵聽器
outsideChild.addEventListener(MouseEvent.CLICK, outsideHandler);//註冊類外面的偵聽器
}
private function inclassHandler(event:MouseEvent):void {
trace("類裏面的偵聽器偵聽到MouseEvent事件: " + event);
trace("this關鍵字指向:"+this);
}
}
}
function outsideHandler(event:MouseEvent):void {
trace("類外面的偵聽器偵聽到MouseEvent事件: " + event);
trace("this關鍵字指向:"+this);
}
import flash.display.Sprite;
import flash.events.MouseEvent;
//這個類就是畫一個矩形,然後你點擊這個矩形會發出標準鼠標click的事件
class KingdaSprite extends Sprite {
public var nickname:String;
public var ColorNum:uint;
//colorNumber就是#ffcc00這種類型的數,在AS3中推薦用新的uint型來標記它
public function KingdaSprite(colorNumber:uint, nameString:String) {
ColorNum = colorNumber;
nickname = nameString;
graphics.beginFill(ColorNum);
graphics.drawRect(0,0,100,100);
graphics.endFill();
}
}
鼠標一點擊創建出來的綠色矩形,會看到輸出
類裏面的偵聽器偵聽到MouseEvent事件: [MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=64 localY=80 stageX=64 stageY=80 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0]
this關鍵字指向:[object AddListener] 
類外面的偵聽器偵聽到MouseEvent事件: [MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=64 localY=80 stageX=64 stageY=80 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0]
this關鍵字指向:[object global]
 
演示完畢,我們來講第一個話題
(1) Event對象發生了什麼變化
AS2.0中創建event 對象是很隨意的,只要這個對象有一個String屬性叫做type的就可以了,甚至連target都可以省掉。不要以爲這不規範不應該做,看看Flash類源碼,Macromedia的程序員可不只一次的這樣使用過。所謂上樑不正下樑歪,就是這樣。(其實嚴格說也沒什麼不對,有時候是不需要target。但沒有標準就是不好)
本文轉自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/1762.html
發佈了14 篇原創文章 · 獲贊 1 · 訪問量 1922
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章