Как инициализировать компоненты Flash ActionScript 3 (AS3)? - PullRequest
3 голосов
/ 09 марта 2010

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

Большинство примеров, которые я видел в Интернете, используют Event.INIT, прикрепленный к loaderInfo.

loaderInfo.addEventListener(Event.INIT, initHandler);

По моему опыту, это событие срабатывает только в первом кадре фильма.

Другие люди используют Event.COMPLETE, который запускается после Event.INIT, чтобы гарантировать, что компонент и параметры доступны для использования. Опять же, событие, кажется, срабатывает только в первом кадре фильма. Это имеет смысл, поскольку он присоединен к свойству loaderInfo компонента.

Ниже приведен класс для очень простого компонента, который показывает именно то, о чем я говорю. Прикрепите этот класс к мувиклипу в диалоговом окне «Свойства» и в диалоговом окне «Определение компонента» (я не буду рассказывать, как создать компонент, поскольку вы, вероятно, знаете), затем перетащите полученный компонент на сцену и установите «Test var». параметр "TEST_VAR_CHANGED".

Когда вы визуализируете фильм с компонентом в первом кадре, вы увидите:

constructor null
initHandler TEST_VAR_CHANGED
completeHandler TEST_VAR_CHANGED

Когда вы визуализируете фильм с компонентом во втором кадре, вы увидите только:

constructor null

Итак ... какое событие я слушаю, чтобы гарантировать доступность параметров компонента перед тем, как запустить обработчик инициализации?

Класс компонентов:

package
{
    import flash.display.MovieClip;
    import flash.events.Event;

    public class ComponentEventTest extends MovieClip
    {
        [Inspectable(name="Test var", type="String")]
        public var testVar:String;    

        function ComponentEventTest()
        {
            trace('constructor', testVar);
            loaderInfo.addEventListener(Event.INIT, initHandler);
            loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
        }

        private function initHandler(evt:Event):void
        {
            loaderInfo.removeEventListener(Event.INIT, initHandler);
            trace('initHandler', testVar);
        }

        private function completeHandler(evt:Event):void
        {
            loaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
            trace('completeHandler', testVar);
        }        
    }
}

1 Ответ

2 голосов
/ 10 марта 2010

Редактировать: Хорошо, вы можете дождаться отображения первого кадра:

Прослушивание exit frame, если доступно (флэш-плеер 10) или enter frame:

    function ComponentEventTest()
    {
        trace('constructor', testVar);
        addEventListener(Event.ENTER_FRAME, initHandler);
    }

    private function initHandler(evt:Event):void
    {
        removeEventListener(evt.type, initHandler);
        trace('initHandler', testVar);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...