Какой самый простой объект, который может использовать addEventListener в AS3?

#flash #actionscript-3

#flash #actionscript-3

Вопрос:

Я создаю класс-обработчик, который будет выглядеть примерно так:

 package avian.background
{
    import flash.events.EventDispatcher;
    import flash.events.Event;
    import flash.utils.getTimer;
    import avian.objects.AvChild;
    import avian.background.AvManager;

    public class AvHandler extends EventDispatcher
    {
        // vars
        private var _last:uint = 0;
        private var _time:uint = 0;

        /**
         * Constructor
         */
        public function AvHandler()
        {
            addEventListener(Event.ENTER_FRAME, _handle);
            _last = getTimer();
        }

        /**
         * Called on dispatch of Event.ENTER_FRAME
         */
        private function _handle(e:Event):void
        {
            _time = getTimer() - _last;

            var i:AvChild;
            for each(i in AvManager.getList("all"))
            {
                i.step(_time);
            }

            _last = getTimer();
        }
    }
}
  

Цель состоит в том, чтобы этот класс расширил самый базовый класс, который все еще может использоваться addEventListener() — по какой-то причине ENTER_FRAME даже никогда не срабатывает — работает нормально, если он должен расширять Sprite или MovieClip. Я ошибочно предположил, что EventDispatcher был самым простым из возможных.

Изначально у меня было событие, примененное к этапу, который я проанализировал через конструктор — это просто казалось довольно неопрятным.

Ответ №1:

самый простой класс, который ЗАПУСКАЕТ событие.ENTER_FRAME — это DisplayObject

Комментарии:

1. Спасибо, приятель, — заглянул в это.

2. Можете ли вы подтвердить, что вы действительно можете расширить DisplayObject и создать экземпляр вашего класса AvHandler без ошибок во время выполнения? Я не думаю, что DisplayObject может быть создан напрямую, но я лично не знаю, безопасно ли создавать экземпляр, как только вы расширяете его на один уровень ниже (без какой-либо настройки, необходимой).

3. Он может иметь некоторый уровень «абстрактного обнаружения» в машинном коде для DisplayObject, который может быть реплицирован в AS3 как: if(Object(this).constructor==YourAbstractClass) { //ОШИБКА! }

Ответ №2:

DisplayObject — это самый простой объект для запуска ENTER_FRAME.

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObject.html#event:enterFrame