Ошибка прослушивателя событий Flash AS3

#flash #actionscript-3 #addeventlistener #event-listener

#flash #actionscript-3 #addeventlistener #прослушиватель событий

Вопрос:

У меня есть этот фрагмент кода AS3. он загружает внешний SWF-файл и должен его воспроизвести. Я добавил прослушиватель событий, который запускается при загрузке файла. Вызываемая им функция перемещает видео на самый нижний слой, чтобы кнопки все еще отображались, а затем воспроизводит файл. Проблема в том, что прослушиватель событий никогда не запускается. Кто-нибудь может помочь? Заранее спасибо.

Дэйв

     var loadit:Loader = new Loader();
    var load_request:URLRequest = new URLRequest("http://www.friedmanllp.com/video/intro.swf");
    loadit.addEventListener(Event.COMPLETE, onCompleteHandler);
    //swfLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
    //loadit.load(load_request);

    function onCompleteHandler(loadEvent:Event) {
        addChildAt(loadEvent.currentTarget.content, 1);
        loadit.load(load_request);
    }
  

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

1. почему ваш первый вызов //loadit.load(load_request); прокомментирован? Кажется, ваш загрузчик никогда не загружает какие-либо данные

2. Какова цель onCompleteHandler события? Как это выполняется перед вызовом метода load?

3. Я закомментировал это во время просмотра видео, прежде чем видео было присвоено правильному слою. Таким образом, вы услышите это, но не увидите в течение нескольких секунд. Возможно, произошло событие. ЗАВЕРШЕНО. Сначала я попытался переместить событие загрузки ПОСЛЕ строки кода addChildAt. ИТАК … я использовал Event. ИНИЦИАЛИЗАЦИЯ, и это позаботилось об этом. Не могли бы вы, пожалуйста, удалить значение -1. Я чувствую, что это очень правильный вопрос, хотя в итоге я решил его сам.

Ответ №1:

Несколько вещей неправильны.

Во-первых, ваш загрузчик никогда не загрузится, потому что вы никогда не просили его об этом. У вас закомментирован вызов метода load.

Кроме того, послушайте crooksy88. Вам необходимо прослушать свойство contentLoaderInfo для события завершения. Прослушивание экземпляра Loader не приведет к отправке искомого события.

Также предупреждение — убедитесь, что ваша переменная loadit не собирает мусор! Если опубликованный вами код выполняется в вызове функции, то вам необходимо где-то сохранить ваш экземпляр Loader (например, в переменной экземпляра), чтобы убедиться, что он остается в памяти.

Код должен выглядеть примерно так:

 var load_request:URLRequest = new URLRequest("http://www.mydomain.com/mySubFolder/myExternal.swf");
var loadit:Loader = new Loader();
loadit.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
loadit.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
loadit.load(load_request);

function onProgressHandler(event:ProgressEvent):void
{
    trace("onProgressHandler(event)");
}

function onCompleteHandler(event:Event):void
{
    trace("onCompleteHandler(event)");
    addChildAt(loadit, 1);
}
  

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

1. Спасибо за подробный ответ. Я решил это, используя Event. ИНИЦИАЛИЗИРУЙТЕ вместо этого событие. ЗАВЕРШЕНО.

Ответ №2:

Попробуйте это…

 loadit.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);   
  

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

1. Я пробовал это раньше, никогда не работало. Для этого нет предварительной загрузки. Он просто запускается. Имеет ли это значение?

Ответ №3:

Я решил это с помощью Event.ИНИЦИАЛИЗАЦИЯ:

     var loadit:Loader = new Loader();
    var load_request:URLRequest = new URLRequest("http://www.friedmanllp.com/video/intro.swf");
    loadit.contentLoaderInfo.addEventListener(Event.INIT, onCompleteHandler);  
    loadit.load(load_request);

    function onCompleteHandler(loadEvent:Event) {
        addChildAt(loadEvent.currentTarget.content, 1);
    }
  

Ответ №4:

Краткая версия, основанная на пальцах

 var loadIt:Loader = new Loader();
on(loadIt.contentLoaderInfo).complete  = function (e:Event) {
    addChildAt(e.currentTarget.content, 1);
}
loadIt.load(new URLRequest("http://www.friedmanllp.com/video/intro.swf"));