#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.