2013-10-09 59 views
1

我做了一個門/按鈕,並添加爲一類,我想它,所以當你點擊它,將調度,在主要動作頁信號的功能來運行事件使用AS3事件調度

package { 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 

    public class Door extends MovieClip { 

     var direct:String; 
     var doorId:int; 
     var dispatcher = new EventDispatcher(); 

     public function Door() { 
      this.addEventListener(MouseEvent.CLICK, changeRoom) 
      this.buttonMode = true; 
     } 

     function changeRoom(e:MouseEvent):void{ 
      trace("door click") 
      dispatcher.dispatchEvent(new Event("doorClick")); 
     } 
    } 
} 

主頁看起來像這樣

var doorTop = new Door(); 
doorTop.addEventListener("doorClick",goToRoom); 
//should i be doing stage.addEventListener("doorClick",goToRoom); 
function goToRoom(e:Event):void 
{ 
    trace("i went here") 
} 

我做錯了什麼?看起來很直白

回答

4

您不是從doorTop派發活動,而是從dispatcherdoorTop內調度它。

Door延伸MovieClip它延伸EventDispatcher。你不需要創建一個EventDispatcher,你的Door類已經是一個了。

只是這樣做:

function changeRoom(e:MouseEvent):void{ 
     trace("door click") 
     this.dispatchEvent(new Event("doorClick")); 
    } 

將從Door對象分派它。此外,如果您使用的是類,則在類的頂級範圍內聲明的每個對象(包括函數)都必須包含訪問修飾符(公共,私有,內部或受保護的)。您不能只聲明function changeRoom,它必須是public function changeRoom。與每個變量相同。

+0

我有一個問題,如果該類沒有擴展事件調度程序,那麼做什麼是正確的方法呢?一旦收到,如何識別誰叫它? – artSir

+0

如果您需要在類中使用事件,則應該**總是**使其擴展EventDispatcher。你不應該在代碼中實例化一個實際的EventDispatcher。沒有任何東西可以阻止你(在這種情況下,你可以將偵聽器附加到'object.dispatcher'上,而不是'object'),但你甚至不需要。大多數對象已經擴展了EventDispatcher, –

+0

謝謝,我可以用什麼來識別誰發送了事件?像this.target.e這樣的東西? – artSir