1

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

myTM.addEventListener("allTransitionsInDone", doneTrans);

(myTM 是一个 TransitionManager 实例。)当非运动转换(如淡入淡出)完成时,触发事件的正确方法是什么?我通常使用Event.EVENT_NAME,但这个没有出现。

4

2 回答 2

3

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

但是,“allTransitionsInDone”实际上没有常数,因为它(有点,参见livedocs上的评论)没有记录。因此没有 .ALL_TRANSITIONS_IN_DONE 常量。

于 2009-02-20T06:20:21.857 回答
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. 将事件名称定义为事件调度程序中的静态常量(例如 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.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));
        }
    }
}
于 2009-02-21T03:20:51.627 回答