Как определить, когда основной SWF-файл полностью загружен?

Как я понял на собственном опыте, Flash транслирует ваш .swf, то есть он может начать воспроизведение файла, даже если загружена только первая пара кадров.

Обычно при загрузке внешнего .swf вы просто регистрируете обработчик в событии COMPLETE класса Loader или URLLoader, и это будет так. Пример (исключение и т. Д. Опущено):

var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.load(request); 

function completeHandler(event:Event):void {
    //trigger starting playback here
}

Однако, если файл .swf является «основным» swf, то есть файлом, на который ссылается html, я могу получить доступ только к свойству root.loaderInfo, то есть к этому:

root.loaderInfo.loader.addEventListener(Event.COMPLETE, completeHandler);

выдает ошибку . Загружаемый объект недостаточно загружен, чтобы предоставить эту информацию.

Обходной путь, который делает работу, но заставляет меня съеживаться, имеет таймер и опрашивает свойство bytesLoaded следующим образом:

var Poller:Timer = new Timer(500, 0);
Poller.addEventListener(TimerEvent.TIMER, waitForLoad);
var e:Event;
waitForLoad(e);


function waitForLoad(event:Event):void {
 if (root.loaderInfo.bytesLoaded < root.loaderInfo.bytesTotal) {
     if (!Poller.running) Poller.start();
     return;  
 } else {
     Poller.stop();  
     completeHandler(event);
 }
}

Должно быть лучшее решение, чем это. В идеале я мог бы зарегистрировать обработчик события completeHandler в Event.COMPLETE для какого-либо свойства корневого или промежуточного объекта, и он действительно выдал бы это событие, когда файл был полностью загружен ... Кто-нибудь знает, какое это свойство?

Ура,
Золтан

PS: я использую Adobe Flash CS3

13.10.2009 06:53:39
2 ОТВЕТА
РЕШЕНИЕ

Вместо

root.loaderInfo.loader.addEventListener(Event.COMPLETE, completeHandler);

вызов

this.loaderInfo.addEventListener(Event.COMPLETE, completeHandler);

от конструктора класса документа.

3
13.10.2009 06:59:34

в AS2 попробуйте этот код. Загрузка показывает прогресс в первом кадре, а основное содержимое - в третьем. Этот код приведен в справочнике по ActionScript 2.0 (getBytesLoaded). http://help.adobe.com/ko_KR/AS2LCR/Flash_10.0/00001304.html#1333866

if (this._framesloaded<this._totalframes) {
    this.gotoAndPlay(1);
} else {
    this.gotoAndStop(3);
}
0
13.03.2014 14:53:35