Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   unload для multiloadera (http://www.flasher.ru/forum/showthread.php?t=91562)

Stone 02.02.2007 15:53

unload для multiloadera
 
задача:
загрузить несколько файлов и отобразить их загрузку одним прогресбаром.

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

проблема:
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

Цитата:

Сообщение от Stone
с двумя файлами нет проблем. а когда файлов больше 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

да много что должна, только всем простила


Часовой пояс GMT +4, время: 14:26.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.