我得到的代碼相當不舒服,我在網絡上找到這樣Flash:這個事件名稱在哪裏硬編碼?
myTM.addEventListener("allTransitionsInDone", doneTrans);
(myTM是TransitionManager實例。)什麼是得到一個事件,火災時,非運動過渡正確的方式(像褪色)完成?我通常使用Event.EVENT_NAME
,但這不是一個。
我得到的代碼相當不舒服,我在網絡上找到這樣Flash:這個事件名稱在哪裏硬編碼?
myTM.addEventListener("allTransitionsInDone", doneTrans);
(myTM是TransitionManager實例。)什麼是得到一個事件,火災時,非運動過渡正確的方式(像褪色)完成?我通常使用Event.EVENT_NAME
,但這不是一個。
事件名稱的常量通過約定在事件類型上定義,例如,「mouseDown」事件是MouseEvent.MOUSE_DOWN。
但是,'allTransitionsInDone'具體實際上沒有固定的,因爲它是(有點,見livedocs評論)沒有記錄。因此沒有.ALL_TRANSITIONS_IN_DONE常量。
增加了西蒙的回答,如果你想避免「鬆散引用」事件名稱和定義自己的人,這裏有一個使用這些常規方法的幾個不同的主張:
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.Event,flash.events.StatusEvent,flash.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));
}
}
}
我認爲在第一個構造函數和類應該有相同的名稱,不是?另外,在最後一個例子中,您是說所有TransTransInDone都被三個「標準」事件之一所覆蓋? – 2009-02-21 12:46:16
是的,我看到在LiveDocs ...可怕的東西。我想,一旦我弄清楚如何檢查源代碼,我會發現它不那麼令人擔憂。謝謝西蒙(再次)。 – 2009-02-20 12:17:42