AS3 Loader продолжает перезагружать один и тот же SWF снова и снова - PullRequest
1 голос
/ 18 февраля 2011

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

Вот пример 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, который использует основную временную шкалу с несколькими слоями, ключевыми кадрами и сценарием действия.

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

м

1 Ответ

0 голосов
/ 19 февраля 2011

Сначала извлеките экземпляр загрузчика из функции, в этом нет необходимости.Во-вторых, убейте своих слушателей в функции onComplete.В-третьих, если этот код загрузчика находится на временной шкале оболочки загрузчика, убедитесь, что в нем не более одного фрейма, или если есть (не уверен, почему так будет), поставьте стоп на фрейм, содержащий код загрузчика.Или, что еще лучше, используйте класс Document для хранения кода вашего загрузчика, а не помещайте его на временную шкалу.Мое лучшее предположение, что вы как-то снова вызывали 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)
{
    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;
}
...