2009-02-20 55 views
1

我得到的代碼相當不舒服,我在網絡上找到這樣Flash:這個事件名稱在哪裏硬編碼?

myTM.addEventListener("allTransitionsInDone", doneTrans); 

(myTM是TransitionManager實例。)什麼是得到一個事件,火災時,非運動過渡正確的方式(像褪色)完成?我通常使用Event.EVENT_NAME,但這不是一個。

回答

3

事件名稱的常量通過約定在事件類型上定義,例如,「mouseDown」事件是MouseEvent.MOUSE_DOWN。

但是,'allTransitionsInDone'具體實際上沒有固定的,因爲它是(有點,見livedocs評論)沒有記錄。因此沒有.ALL_TRANSITIONS_IN_DONE常量。

+0

是的,我看到在LiveDocs ...可怕的東西。我想,一旦我弄清楚如何檢查源代碼,我會發現它不那麼令人擔憂。謝謝西蒙(再次)。 – 2009-02-20 12:17:42

1

增加了西蒙的回答,如果你想避免「鬆散引用」事件名稱和定義自己的人,這裏有一個使用這些常規方法的幾個不同的主張:

1.創建一個自定義事件的子類flash.events.Event

可能是最傳統和最明顯的方式,即使有點浪費代碼。

package transitions.events 
{ 
    import flash.events.Event; 


    public class MyTransitionEvent extends Event 
    { 

     public static const TRANSITION_INIT : String = "events.TransitionEvent.transitionInit"; 
     public static const TRANSITION_PROGRESS : String = "events.TransitionEvent.transitionProgress"; 
     public static const TRANSITION_COMPLETE : String = "events.TransitionEvent.transitionComplete"; 

     public function MyTransitionEvent(type : String, bubbles : Boolean, cancelable : Boolean) 
     { 
      super(type, bubbles, cancelable); 
     } 


     override public function clone() : Event 
     { 
      return new TransitionEvent(type, bubbles, cancelable); 
     } 
    } 
} 

2.從事件調度中定義的事件名稱爲靜態常量(如雪碧或MovieClip的子類)

爲了讓事情更清晰,事件類型應該完全從類中定義事件被派遣。

package 
{ 
    import flash.events.Event; 
    import flash.events.EventDispatcher;   


    public class Transition extends EventDispatcher 
    { 

     public static const TRANSITION_INIT : String = "events.TransitionEvent.transitionInit"; 
     public static const TRANSITION_UPDATE : String = "events.TransitionEvent.transitionUpdate"; 
     public static const TRANSITION_COMPLETE : String = "events.TransitionEvent.transitionComplete"; 

     public function Transition() 
     { 
     } 


     private function init() : void 
     { 
      dispatchEvent(new Event(TRANSITION_INIT)) 
     } 
    } 
} 

3.重用本土flash.events

幸運的是,預定義的事件(即對象類型:flash.events.Eventflash.events.StatusEventflash.events.NetStatusEvent等)涵蓋了大多數可能的情況。因此,爲了不重新發明輪子並節省一些寶貴的代碼,如果您發現一個符合您的要求,只需重新使用它。

package 
{ 
    import flash.events.Event; 
    import flash.events.EventDispatcher;  


    public class Transition extends EventDispatcher 
    { 


     public function Transition() 
     { 
     } 


     private function init() : void 
     { 
      dispatchEvent(new Event(Event.INIT)); 
     } 

     private function change():void 
     { 
      dispatchEvent(new Event(Event.CHANGE)); 
     } 

     private function complete():void 
     { 
      dispatchEvent(new Event(Event.COMPLETE)); 
     } 
    } 
} 
+0

我認爲在第一個構造函數和類應該有相同的名稱,不是?另外,在最後一個例子中,您是說所有TransTransInDone都被三個「標準」事件之一所覆蓋? – 2009-02-21 12:46:16