Re: [問題]關於Listener的一些問題

看板Flash作者 (lol)時間18年前 (2007/03/27 12:25), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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
文章代碼(AID): #1629okR_ (Flash)
文章代碼(AID): #1629okR_ (Flash)