PDA

Просмотр полной версии : MovieClipLoader - проблема


alikjan
19.12.2005, 20:03
у меня проблема
есть karta.swf = 200 Кб
чтобы сделать к нему предзагрузчик я использую MovieClipLoader



// Создаем объект MovieClipLoader
var mcl:MovieClipLoader = new MovieClipLoader();
// Создаем объект-приемник
var mclListener:Object = new Object();
// Регистрируем mclListener на получение сообщений от mcl
mcl.addListener(mclListener);
// Начальный масштаб полосы состояния загрузки
preloader.statusBar._xscale = 1;
// инициируем загрузку документа в клип holder
mcl.loadClip("karta.swf", 1);
mclListener.onLoadStart = function(target) {
target.onEnterFrame = function() {
// Локальный объект с информацией о состоянии загрузки
var progress:Object = mcl.getProgress(this);
var loadStatus:Number = Math.round(progress.bytesLoaded / progress.bytesTotal * 100);
// Если информация о загруженном объеме поступила...
if (progress.bytesLoaded) {
// Изменяем ширину полосы состояния
this._parent.preloader.statusBar._xscale = loadStatus;
// Выводим процент загрузки
this._parent.preloader.statusTxt.text = loadStatus + "%";
// Выводим данные о загрузке
this._parent.preloader.infoTxt.text = "Загружено " + Math.round(progress.bytesLoaded / 1024) + "Кб из " + Math.round(progress.bytesTotal / 1024);
}
// Если загрузка окончена...
if (loadStatus == 100) {
// Выгружаем содержимое предзагрузчика и заканчиваем его работу
mcl.unloadClip(preloader);
delete this.onEnterFrame;
}
};
};


проценты не идут, а карта подгружается

наверно ошибка в этой строчке:
mcl.loadClip("karta.swf", 1);

Nirth
19.12.2005, 20:08
используй событие onProgress класса MovieClipLoader

alikjan
19.12.2005, 20:56
используй событие onProgress класса MovieClipLoader

СПАСИБО!!!

только ты описался: onProgress --> onLoadProgress

Если кому интересно, то вот исходник:


// Создаем объект MovieClipLoader
var mcl:MovieClipLoader = new MovieClipLoader();
// Создаем объект-приемник
var mclListener:Object = new Object();
// Регистрируем mclListener на получение сообщений от mcl
mcl.addListener(mclListener);
// Начальный масштаб полосы состояния загрузки
preloader.statusBar._xscale = 1;
// инициируем загрузку документа в клип holder
mcl.loadClip("karta75.swf", 1);
mclListener.onLoadProgress = function(target, loadedBytes, totalBytes) {

var loadStatus:Number = Math.round(loadedBytes / totalBytes * 100);
preloader.statusBar._xscale = loadStatus;
preloader.statusTxt.text = loadStatus + "%";
preloader.infoTxt.text = "Загружено " + Math.round(loadedBytes / 1024) + "Кб из " + Math.round(totalBytes / 1024);

// Если загрузка окончена...
if (loadStatus == 100) {
// Выгружаем содержимое предзагрузчика и заканчиваем его работу
mcl.unloadClip(preloader);
delete this.onEnterFrame;
}
};



Странно, но у меня мувик загружаемый весит 210 Кб а написано 400 ??

Nirth
19.12.2005, 22:08
Извиняй, забыл, а насчет размера, это потому что ты используешь сжатие

MOHCTEP
20.12.2005, 02:08
Опсь! Nirth в догонку ответь пожалуйста. Почему у меня эта штука не пашет?


var my_mcl:MovieClipLoader=new MovieClipLoader();
var mcl_list=new Object();
my_mcl.addListener(mcl_list);
//Сорри. Забыл вставить сюда это для полноты. Но в исходнике то эти объявления имеются.
mcl_list.onLoadStart=function(mc){
loader.txt="Загрузка "+imgCurrent+" кадра";
loader.bar._xscale=0;
loader.procent='0 %';
var lp=my_mcl.getProgress(mc);
trace('LoadStart\t'+mc+'\n*********');
trace('Bytes Total='+lp.bytesTotal+'\tBytes Loaded='+lp.bytesLoaded);
mcl_timer=setInterval(mcl_tracer,50,mc);// Приходится извращаться с тимером
}
//"onLoadStart" Трейсится, но все по 0. Хотя в доках вроде сказано, что уже отсюда можно получить размер файла и первой порции загрузки

mcl_list.onLoadProgress=function(mc, loadedBytes, totalBytes){//Do not working!
var lp=my_mcl.getProgress(mc);
trace('LoadProgress\nTotal='+totalBytes+'\tLoaded='+loadedBytes);
}
//А вот этого трейса у меня нету! :( ПОЧЕМУ????

mcl_list.onLoadInit=function(mc){
var lp=my_mcl.getProgress(mc);
loader.bar._xscale=150;
loader.procent='100 %';
//trace('LoadInit'+mc+'\nTotal='+lp.bytesTotal+'\tLoaded='+lp.bytesLoaded);
clearInterval(mcl_timer);
//create();
}
//onLoadInit трейсится нормально

function mcl_tracer(mc,lp){
var lp=my_mcl.getProgress(mc);
//trace('\t\tBytes\nTotal='+lp.bytesTotal+'\tLoaded='+lp.bytesLoaded);
loader.bar._xscale=(lp.bytesLoaded/lp.bytesTotal)*150;
loader.procent=Math.floor((lp.bytesLoaded/lp.bytesTotal)*100)+' %';
updateAfterEvent();
}


Не пойму: чего не так сделал? Почему не отрабатывает "onLoadProgress"?

Stone
20.12.2005, 16:45
onLoadProgress в 7-ке вроде не работает.

MOHCTEP
20.12.2005, 19:38
onLoadProgress в 7-ке вроде не работает.
Ну! :mad: И че это за класс такой? Половина работает, половина нет?

KUZEN
20.12.2005, 22:07
Ну! :mad: И че это за класс такой? Половина работает, половина нет?
Классами нужно ещё и пользоваться уметь ...

ffffff
20.12.2005, 23:00
этот класс был добавлен в 7 и полностью работоспособен.

MOHCTEP
21.12.2005, 00:48
Классами нужно ещё и пользоваться уметь ...
Согласен! Информации маловато. Объясни пожалуйста, в чем тут проблема? Код то, по сути, из хелпа взят. Таймер нормально работает, а "родной" метод даж не трейсится, стало быть - не вызывается?

Король
21.12.2005, 01:08
у меня все трейсится

loadListener = new Object();
loadListener.onLoadComplete = function(target_mc, httpStatus) {
trace(">> loadListener.onLoadComplete()");
};
loadListener.onLoadProgress = function(){
trace("test");
}
mcl = new MovieClipLoader();
mcl.addListener(loadListener);
mc = _root.createEmptyMovieClip("mc",1)
mcl.loadClip("1.swf", mc)



публикую в семерке

Antares
21.12.2005, 02:22
Открываем хелп и видим: onLoadProgress при локальном тестировании не работает.

MOHCTEP
21.12.2005, 02:32
2 Король Спасибо. А у меня тож для 7, но не пашет...???... Бред какой-то... Щас, из принципу, ваш код воткну в кадр и гляну.

2 Kuzen Возможно вас насторожило отсутствие обьявления переменных класса и слушателя? Дико извиняюсь, отредактировал! Просто, в исходнике, они были обьявлены довольно далеко от обработчика и я, честно говоря, забыл их закопи-пэйстить сюда. Ну и картинку гружу так:"my_mcl.loadClip(img,mc);"

MOHCTEP
21.12.2005, 02:44
Открываем хелп и видим: onLoadProgress при локальном тестировании не работает.
:eek: Ёпрст!А ведь точно! Проглядел. Спасибо всем! Жаль, что эта штука на симуляторе не работает.