Флэш: Где это название события жестко запрограммировано, пожалуйста? - PullRequest
1 голос
/ 20 февраля 2009

Мне довольно неудобно с кодом, который я нахожу в сети, как этот

myTM.addEventListener("allTransitionsInDone", doneTrans);

(myTM - это экземпляр TransitionManager.) Как правильно получить событие, которое будет инициировано, когда выполняется переход без движения (например, с постепенным исчезновением)? Я обычно использую Event.EVENT_NAME, но это один не подходит.

Ответы [ 2 ]

3 голосов
/ 20 февраля 2009

Константа для имени события определяется в типе события в соответствии с соглашением, поэтому, например, событием "mouseDown" является MouseEvent.MOUSE_DOWN.

Однако у 'allTransitionsInDone' фактически нет константы, поскольку она (вроде как см. Комментарии к aliveocs ) недокументирована. Поэтому здесь нет постоянной .ALL_TRANSITIONS_IN_DONE.

1 голос
/ 21 февраля 2009

Добавлено к ответу Саймона, если вы хотите избежать «слабо ссылающихся» имен событий и определить свои собственные, вот несколько различных предложений традиционных способов их использования:

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));
        }
    }
}
...