Как определить, когда основной SWF-файл полностью загружен? - PullRequest
1 голос
/ 13 октября 2009

Как я понял на собственном опыте, 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 для какого-либо свойства корневого или промежуточного объекта, и он действительно выдал бы это событие, когда файл полностью загрузится Кто-нибудь знает, какое это свойство?

Приветствия,
Золтан

P.S .: Я использую Adobe Flash CS3

Ответы [ 2 ]

3 голосов
/ 13 октября 2009

вместо

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

звонок

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

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

0 голосов
/ 13 марта 2014

в 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);
}
...