AS3 Loader продолжает перезагружать один и тот же SWF снова и снова

У меня есть флэш-анимация, сделанная на основной временной шкале SWF с парой слоев, некоторыми функциями и некоторыми метками ключевых кадров. Например, у меня есть мувиклип со звездой, который появляется на экране, а затем запускает dispatchEvent для основной временной шкалы, чтобы перейти к метке кадра "далее".

Вот пример ActionScript, используемого на основной временной шкале:

Stars.addEventListener("fadeInTitle",_fadeInTitle);

function _fadeInTitle(e:Event):void {
    Title.gotoAndPlay("fadeIn");
    Stars.removeEventListener("fadeInTitle",_fadeInTitle);
}

stop();

Этот SWF один работает отлично. Проблема возникает, когда я пытаюсь загрузить этот SWF-файл в другой. Что происходит, так это то, что загрузчик продолжает перезагружать SWF снова и снова, перекрывая их, и скрипт действий, который находится на главной временной шкале загруженного SWF, игнорируется, временная шкала воспроизводится непрерывно. Вот код, который я использую для загрузки SWF:

import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;

function startLoad(){
    var mLoader:Loader = new Loader();
    var mRequest:URLRequest = new URLRequest("Fly.swf");
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
    mLoader.load(mRequest);
}

function onCompleteHandler(loadEvent:Event){
    addChild(loadEvent.target.content);
}

function onProgressHandler(mProgress:ProgressEvent){
    var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
}

startLoad();

Там нет ничего особенного. Просто простой загрузчик.

Я нашел обходной путь, поместив всю анимацию в один основной мувиклип и поместив этот мувиклип на основную временную шкалу (один ключевой кадр, один слой, без ActionScript) и затем загрузив его. Таким образом, он работает нормально, но больше похоже на патч, чем на решение. Мне бы очень хотелось знать, почему происходит ошибка, когда вы пытаетесь загрузить внешний SWF-файл, который использует основную временную шкалу с несколькими слоями, ключевыми кадрами и ActionScript.

Любая помощь / подсказка будет принята с благодарностью.
Большое спасибо за чтение.

м

1 ответ

Решение

Сначала удалите экземпляр функции загрузки из функции, это не обязательно. Во-вторых, убейте своих слушателей в функции onComplete. В-третьих, если этот код загрузчика находится на временной шкале оболочки загрузчика, убедитесь, что в нем не более одного фрейма, или если есть (не уверен, почему так будет), установите стоп на фрейм, содержащий код загрузчика. Или, что еще лучше, используйте класс Document для хранения кода вашего загрузчика, а не помещайте его на временную шкалу. Мое лучшее предположение, что вы как-то снова вызывали startLoad(). Кроме того, убедитесь, что у вас установлен проигрыватель Flash Debug, чтобы вы получали правильные отчеты об ошибках при просмотре этого в браузере.

var mLoader:Loader = new Loader();
var mRequest:URLRequest = new URLRequest("Fly.swf");
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
mLoader.load(mRequest);


function onCompleteHandler(loadEvent:Event)
{
    mLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onCompleteHandler);
    mLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgressHandler);
    addChild(loadEvent.target.content);
}

function onProgressHandler(mProgress:ProgressEvent)
{
    var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
}
Другие вопросы по тегам