PDA

Просмотр полной версии : unload для multiloadera


Stone
02.02.2007, 15:53
задача:
загрузить несколько файлов и отобразить их загрузку одним прогресбаром.

делаю:
начинаю загрузку файла, узнаю его размер, выгружаю, когда все размеры посчитаны - начинается окончательная загрузка.

проблема:
unloadClip MovieClipLoader-а анлоадит только после полной занрузки.
unloadMovie работает, но нет возможности отследить ошибку загрузки (таймаут не гарантия реального отсутствия файла).
пробовал даже LoadVars. узнаю размер. удаляю лоадер - загрузка продолжается. а если изменить ссылку, то с начала грузит файл по новой ссылке, а потом продолжает закачивать старый.

Nirth
02.02.2007, 19:17
А зачем ты анлоадиш, нельзя загрузить все сразу?

Stone
02.02.2007, 19:55
как это загрузить все сразу?
мне же нужно отобразить все на одном прогресбаре. типа ща загружено 10 байт из 100 000 милионов.
пока загрузка не начнется, неизвестно какой размер у файла.
фокс вообще по одному файлу грузит. если через MovieClipLoader делать, то постоянно прогресбар прыгает от 100 к 0 и обратно Ж(
если простым лоадМуви, то вроде как все кучей пытаются загрузиться, но невозможно отследить ошибку загрузки, с появлением MovieClipLoader простое лоадМуви выдает в детБайтТотал -1 до начала загрузки, а не как рашьше (в 6-ке), только когда файла такого нет.

а получается, что если загрузка начата, то остановить ее уже нельзя (

firelord
04.02.2007, 13:07
у меня такая же задача, я решил - разбивать прогресс бар на зоны - каждая - для своего файла. они, естественно, получатся неравномерные (правда, можно прикинуть приблизительно относительный размер зон в зависимости от размеров файлов). а выгружать что-то уже загруженное хотя бы на 1% - мне кажется, это идеологически неправильно - ведь лоадер ради загрузки, а не загрузка - ради лоадера ;)

firelord
04.02.2007, 13:13
кстати, пришла в голову такая идея - можно ведь считать размер файла напрямую - через сокет! только ведь во флеше нет обычного сокета? XMLSocket не даст ведь к заголовкам обратиться? а так можно было бы открыть файл, считать заголовки, забрать Content-length - и вперед - к построению прогресс бара ;)

silin
04.02.2007, 19:15
как вариант: собирать информацию о всех загрузках в onLoadProgress:
var urls=["p1.jpg","p2.jpg"];
var loader=new MovieClipLoader();
loader.addListener(this);
var movies=[];
for(var i=0;i<urls.length;i++){
var mc=this.createEmptyMovieClip("mc"+i,i)
movies.push(mc);
loader.loadClip(urls[i],mc);
}

function onLoadProgress(){
for(var i=0,l=0,t=0;i<movies.length;i++){
var gp=loader.getProgress(movies[i]);
l+=gp.bytesLoaded;
t+=gp.bytesTotal;
}
trace(l+"/"+t);
}

Stone
05.02.2007, 01:26
2 silin
с двумя файлами нет проблем. а когда файлов больше 10-ти ?
MovieClipLoader в фоксе не начнет загрузку вторго файла не загрузив первый.

2 firelord
ели бы я знал заранее размер файлов... )

2 all
сейчас читаю про возможности javascript в определении наличия файла. возможности потестить нет. ни у кого подобного опыта нет?

lowka
05.02.2007, 02:41
Почему нельзя использовать в качестве индикатора процесса загрузки не число загруженных байт, а количество файлов, которые уже загружены (общее их число всегда можно получить, если захотеть)?

silin
05.02.2007, 09:50
с двумя файлами нет проблем. а когда файлов больше 10-ти ?
MovieClipLoader в фоксе не начнет загрузку вторго файла не загрузив первый.

дада, это нюанс..
пропустил, сори
тогда, хотя бы не грузить целиком, а только до первого получения инфы:
class LoadSizer {
var arr:Array=[];
var loader:MovieClipLoader;
var tmpMC:MovieClip;
var totalSize:Number=0;
var current:Number=0;
var addListener,broadcastMessage;
function LoadSizer(urls:Array){
AsBroadcaster.initialize(this);
loader=new MovieClipLoader();
tmpMC=_root.createEmptyMovieClip("tmpMC",_root.getNextHighestDepth());
loader.addListener(this);
arr=urls;
loader.loadClip(arr[current],tmpMC);
}

function onLoadProgress(){
totalSize+=loader.getProgress(tmpMC).bytesTotal;
current++;
if(current<arr.length){
loader.unloadClip(tmpMC);
loader.loadClip(arr[current],tmpMC);
}else{
broadcastMessage("onReady",totalSize);
tmpMC.removeMovieClip();
}
}
}
var urls=["p1.jpg","p2.jpg"];
var losdSizer=new LoadSizer(urls);
losdSizer.addListener(this);
function onReady(total){
trace(total);
}
зы: туплю, потом посмотрел.., ты вроде так и делаешь..

7thsky™
05.02.2007, 10:44
Слушайте, а чего юзера то пугать, флэш же выдает размер не сжатый, то есть если помимо картинок еще грузить и свф, то размер может в 2-3 раза больше реально скаченного.

Ну когда это было просто ну совсем необходимо (показывать кол-во байт) при условии что файлы скачивались с нашего сервера, просто запускался пхп скрипт на сервере которому передавался список файлов, скрипт же возвращал размер на каждый файл, потом это показывалось и грузилось.

Stone
05.02.2007, 11:57
2 silin
я это уже пробовал.
проблема:
unloadClip MovieClipLoader-а анлоадит только после полной занрузки.
можно написать все приходящие на ум анлоады, делиты, ремувы, удалить слушателя и сам загрузчик. НО ЗАГРУЗКУ НЕ ОСТАНОВИТЬ (((

2 7thsky™
я на php уже сделал. но когда, например, плашка с логотипами (типа банер) или еще что мелкое требует php, то это как-то ...

да и вопрос то не в том, какимим обходными путями решить проблему.
Вариантов я виже три:
1. может кто-то смог, как-то, вылечить unloadClip MovieClipLoader-а.
2. или знает как отследить ошибку загрузки для LoadMovie.
3. или все делается намного проще и легче, и расскажет как.

Stone
05.02.2007, 12:06
а как делать, если у нас есть три кнопки. при нажатии на кнопку, надо загрузить свои ЦАТЬ файлов. пользователь нажал на первую кнопку. увидел прелоадер обещающий ему пол часа загрузки и решил, что обойдется он без этого раздела и хочет посмотреть другой.
прервать загрузку я не могу. или мне ему принудительно рефреш страници делать?

silin
05.02.2007, 13:26
вроде бы новая загрузка в тот же мувик убивает текущую
т.е. если запустить загрузку како-либо мизерного файла, то можно съэкономить трафик юзера, но надо проверять..
зы:в своем примере я loader.unloadClip(tmpMC) только для порядку написал, должно работать и без него..и как бы не должна до конца..если тем же лоадером в тот же мувик грузить

Stone
05.02.2007, 13:41
да много что должна, только всем простила