Flash:这个事件名称在哪里硬编码,好吗?

时间:2009-02-20 05:55:15

标签: flash transitions

我对在网上找到的代码感到非常不舒服

myTM.addEventListener("allTransitionsInDone", doneTrans);

(myTM是一个TransitionManager实例。)在完成非运动转换(如淡入淡出)时触发事件的正确方法是什么?我通常使用{{1}但是这个不会出现。

2 个答案:

答案 0 :(得分:3)

事件名称的常量是按照约定在事件类型上定义的,例如,“mouseDown”事件是MouseEvent.MOUSE_DOWN。

然而,'allTransitionsInDone'具体实际上没有常数,因为它(有点,见livedocs的注释)没有记录。因此,没有.ALL_TRANSITIONS_IN_DONE常量。

答案 1 :(得分:1)

除了Simon的答案之外,如果你想避免“松散引用”的事件名称并定义你自己的事件名称,这里有一些传统方法的不同命题:

<强> 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。将事件名称定义为事件调度程序中的静态常量(例如Sprite或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));
        }
    }
}