Форум 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 раза больше реально скаченного.

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


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

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