
Код AS3:
// body - конструктор класса.
public function body() {
// Вешаем функцию прелоадера
addEventListener(Event.ENTER_FRAME, preloadMovie);
// События для звука
s.addEventListener(ProgressEvent.PROGRESS, getBT);
s.addEventListener(Event.COMPLETE, soundLoaded);
s.load(soundPath);
//ErrMsg.text = "Не удалось загрузить изображение";
ErrMsg.multiline = true;
ErrMsg.textColor = 0xFFFFFF;
addChild(ErrMsg);
// События для ХМЛ
colorsLoader.addEventListener(ProgressEvent.PROGRESS, getBT);
colorsLoader.addEventListener(ProgressEvent.PROGRESS, getBT);
colorsLoader.addEventListener(ProgressEvent.PROGRESS, getBT);
colorsLoader.addEventListener(Event.COMPLETE,xmlColLoaded);
catalogLoader.addEventListener(Event.COMPLETE,xmlCatLoaded);
seriesLoader.addEventListener(Event.COMPLETE,xmlSerLoaded);
}
//функция, получающая размер загружаемого файла (для хмл и музыки)
public function getBT(e:ProgressEvent) {
_bytesTotal += e.target.bytesTotal;
e.target.removeEventListener(ProgressEvent.PROGRESS, getBT);
}
public function preloadMovie(e:Event) {
var percent:Number = 0;
_bytesLoaded += s.bytesLoaded + catalogLoader.bytesLoaded + seriesLoader.bytesLoaded + colorsLoader.bytesLoaded;
if (_bytesTotal > 0) {
percent = Math.floor(_bytesLoaded/_bytesTotal*100);
(preload as preloader).percent_text.text = percent+"%";
(preload as preloader).gotoAndStop(percent+1);
}
if (_bytesLoaded >= _bytesTotal || _bytesTotal==0) {
(preload as preloader).percent_text.text = "done";
removeEventListener(Event.ENTER_FRAME, preloadMovie);
var spec:spectrum = new spectrum(arrCatalog);
spec.name = "spectrum";
gotoAndStop(2);
ErrMsg.text = "\n" + _bytesTotal;
addChild(spec);
}
_bytesLoaded -= s.bytesLoaded + catalogLoader.bytesLoaded + seriesLoader.bytesLoaded + colorsLoader.bytesLoaded;
}
// Вот так
public function preloadMovie(e:Event) {
var percent:Number = 0;
_bytesLoaded += s.bytesLoaded + catalogLoader.bytesLoaded + seriesLoader.bytesLoaded + colorsLoader.bytesLoaded;
if (_bytesTotal > 0) {
percent = Math.floor(_bytesLoaded/_bytesTotal*100);
(preload as preloader).percent_text.text = percent+"%";
(preload as preloader).gotoAndStop(percent+1);
}
if (_bytesLoaded >= _bytesTotal || _bytesTotal==0) {
(preload as preloader).percent_text.text = "done";
removeEventListener(Event.ENTER_FRAME, preloadMovie);
var spec:spectrum = new spectrum(arrCatalog);
spec.name = "spectrum";
gotoAndStop(2);
addChild(spec);
}
_bytesLoaded -= s.bytesLoaded + catalogLoader.bytesLoaded + seriesLoader.bytesLoaded + colorsLoader.bytesLoaded;
}
public function imgLoaded(e:Event) {
_bytesLoaded += (e.target as LoaderInfo).bytesTotal;
}
public function imgProgress(e:ProgressEvent) {
_bytesTotal += e.bytesTotal;
(e.target as LoaderInfo).removeEventListener(ProgressEvent.PROGRESS,imgProgress);
}
// Загрузка картинок из xml
public function xmlColLoaded(e:Event) {
colors = XML(colorsLoader.data);
for each(var prop:XML in colors.color) {
var objCol:Object = new Object();
var colImg:Loader = new Loader(); // лоадер для загрузки картинки спектра
var colImgUrl:URLRequest = new URLRequest(prop.image.toString()); // urlrequest для картинки спектра
//Создаем евент листенер на конец загрузки картинки, запускаем загрузк
colImg.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imgProgress);
colImg.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
colImg.load(colImgUrl);
//Продолжаем добавление информации в массив
objCol.id = prop.id;
objCol.image = colImg;
objCol.items = new Array();
arrCatalog.push(objCol);
}
arrCatalog.sortOn("id", Array.NUMERIC);
}
(Часть функций я опустил)
Вот только какой-то он глючный получился. Не с первого раза запускается - иногда просто ничего не грузит, а иногда после нескольких рефрешей - работает нормально.
Так ещё похоже и в разных браузерах по-разному.
Я так понимаю, что я что-то не так делаю при сборе bytesLoaded и bytesTotal со всех подгружаемых элементов.
Как ведет себя флэшка можно посмотреть тут madex-design.ru/kyboe
Добавлено через 28 минут
Причем, похоже, в разных браузерах по-разному.