Re: [問題]關於Listener的一些問題
※ 引述《etrexetrex (ETREX)》之銘言:
: addListener (MovieClipLoader.addListener 方法)
: public addListener(listener:Object) : Boolean
: 註冊一個物件,當 MovieClipLoader 事件處理常式被叫用時,使用該物件來接收告知。
: 適用版本:ActionScript 1.0;Flash Player 7
: 參數
: listener:Object - 一個物件,用來偵聽來自 MovieClipLoader 事件處理常式的回呼告
: 知。
: 傳回值
: Boolean - 一個布林值。如果成功建立偵聽程式,則傳回 true;否則傳回 false。
: ==
: 以上是flash的一個內建類別(MovieClipLoader)裡的addListener 的說明
: 問題1:什麼是Listener,我認為是一個等待呼叫的函數,不過感覺怪怪的...
: 問題2:如果寫自訂類別,怎樣讓外部可以使用addListener,就像MovieClipLoader一樣
: 問題3:像onPress這種東西,是物件導向觀念的,一種等待呼叫的函數
: 不過我一直想不通的是以程序導向來說要作出物件導向應該如何做
: 我以為是類似以下:
: while() 或 onEnterFrame() =function()
: {
: if(當滑鼠點某個按鈕)
: 呼叫onPress
: }
: 像這樣不斷的判斷是否被呼叫,不過之前老師說過不是這樣
: 那麼就效率來說,使用Listener會和上述的結構差很多嗎?
: 希望懂這方面的版友可以教我 <(_ _)>
不好意思,先說在前面,這可能不是回答,而比較像是討論
也想請更多有經驗的人分享 ^^; 以下是我的使用經驗
1.
就第一點而言,我也覺得listener是一個等待被呼叫的function
我用public function 也可以達到相同的效果
但是就是在於Listener 可以實現event Driven,也就是之後不管要再加什麼function
我只要再加一個listener 即可,而不用去修改主程式來呼叫這個function
2.
EventDispatcher.addEventListener()
向組件實體註冊偵聽程式。
EventDispatcher.dispatchEvent()
用程式設計方式傳送事件。
Delegate
mx.utils.Delegate
dispatchEvent:Function
addEventListener:Function
removeEventListener:Function
這是一般我要用到事件來處理時會用到的東西
首先你要讓一個不管是MovieClip 還是任何object能夠去dispatch 一個event
用的是在constructor 裡加上
mx.events.EventDispatcher.initialize(this);
這樣他就有能力去發布一個event:
dispatchEvent({type:"evtName", target:this});
type 是指這個事件的名稱,target是指目標
這邊除了以上兩個值一定要有之外,其他的東西是可以延伸的
只要包在Object裡即可
ex:
var o:Object = new Object();
o.type = "onInit";
o.id = 0;
o.name = "gargouille";
dispatchEvent(o);
而接收的部份:
target.addEventListener("onInit", Delegate.create(this, initial));
意思是我向這個target監聽這個onInit的事件
一但這個target丟這個事件出來時,我就去接來處理
然後丟給initial 這個function
function initail(e:Object):Void{
this.userID = e.id;
this.userName = e. name;
}
以上就是我的使用經驗,還請大家高抬貴手,不要鞭的太兇 ^^||
而addListener 和 addEventListener之間的差別我也不是很清楚
這邊只是提出我使用Listener還有自訂事件的方法,希望對大家有幫助!
另外附上Delegate 的說明:
Delegate 類別可讓您執行特定範圍內的函數。此類別讓您可以將相同事件傳送
給兩個不同的函數 (請參閱「使用元件」中的對函數委派事件),也可以呼叫所
包含類別範圍內的函數。
當您將某個函數當作參數傳送至 EventDispatcher.addEventListener() 時,
便會在廣播程式組件實體範圍內叫用這個函數,而不是這個函數在其中所宣告
的物件 (請參閱「使用元件」中的委派函數的範圍)。
您可以使用 Delegate.create(),在所宣告物件範圍內呼叫函數。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.210.181.188
推
03/27 13:07, , 1F
03/27 13:07, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
Flash 近期熱門文章
PTT數位生活區 即時熱門文章