Форум 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)
-   -   прелоадер (http://www.flasher.ru/forum/showthread.php?t=107294)

julie525 29.01.2008 15:00

Вложений: 1
подскажите, почему в прелоадере не отображаются правильно процент загрузки и общий размер подгружаемых файлов - процент сразу проскакивает на 100 и размер всегда 14 к

Люди, подскажите почему проценты неправильно отображаются.

wvxvw 29.01.2008 17:58

Да там грузить практически нечего...

julie525 30.01.2008 14:28

Грузить есть чего. Грузятся фотки, причем прелоадер проскакивает почти сразу на 100, а потом еще некоторое время крутится. Если фотки так быстро загружаются, то и отображаться должны сразу. И почему прелоадер неправильно общий размер вычисляет (14 к) - как будто одну фотографию грузит, а не несколько.

wvxvw 30.01.2008 15:28

В файле в аттаче прелоадер никак не связан с фотками =/ Он показывает загрузку основной флешки, ну а она и весит где-то около 10К...

julie525 30.01.2008 15:37

а как прелоадер привязать к фоткам

объясните, плиз, а то так происходит в любом прелоадере.

wvxvw 30.01.2008 16:13

http://livedocs.adobe.com/flash/9.0/...=00001993.html
Вот, почитайте тут, или во Flash IDE наберите MovieClipLoader, выделите и нажмите F1

julie525 01.02.2008 12:01

Проблема по-прежнему не решается. Я использую
Код:

        for (var i = 0; i<galleryLength; i++) {
var thisMC:MovieClip = this.createEmptyMovieClip("image"+i+"_mc", i+1);
mcLoader_mcl.loadClip(gallery_array[i].src, thisMC);}

но
Код:

mclListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
        var pctLoaded:Number = Math.round(loadedBytes/totalBytes*100);
};

показывает процент загрузки для каждого файла в отдельности, а как узнать общий процент загрузки для всех файлов.

Народ, ну может кто-нибудь знает как по-проще считать общий процент

MrPoma 01.02.2008 14:48

никак, так как надо знать общий вес файлов

wvxvw 01.02.2008 14:55

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

iNils 01.02.2008 14:55

julie525 получает плюс за систематический мультипостинг.

julie525 01.02.2008 15:47

вот и не думала, что прелоадер для нескольких файлов настолько сложен. Странно, что флеш неприспособлен для такой задачи.

iNils 01.02.2008 16:08

Причем тут флеш?

julie525 01.02.2008 16:18

ну как я думала - запускаешь загрузку файлов, ставишь прелоадер и нет проблем.

iNils 01.02.2008 16:30

Жизнь прекрасна? :)
Для создания общего прелоадера флеш должен знать общий размер файлов. Для этого он должен получит первоначальный ответ на запрос к серверу, без этого не куда. Но все запросы проходят через браузер, которые регулирует число одновременных потоков загрузки. И таких потоков может быть у каждого браузеру разное. Я вот знаю про IE, у него их два. То есть, когда вы собираетесь загрузить 40 картинок и делаете одновременный запрос ко всем, с надеждой подсчитать общий размер, на самом дела к серверу уходит только два запроса и пока вы не получите первых две картинки, остальные запросы будут стоять в очереди.

julie525 04.02.2008 16:43

Общий размер файлов я передаю из php через переменные. Через
Код:

mclListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes)
считаю процент, во флеше все работает нормально, но в IE откуда-то появляется еще 300 K, а в opera - 400 K. Т.е. если размер общий загружаемых файлов 1.1 М, то грузится - 1.4 - 1.6 М. Не понимаю как тогда считать размер загружаемых файлов.

iNils 04.02.2008 16:54

Я общего кода не вижу.

julie525 04.02.2008 17:57

Код:

var btTotal:Number = _root.fs; //общий размер
gallery_xml.onLoad = function(success:Boolean) {
        try {
                if (success) {
                       
                        var gallery_array:Array = new Array();
                for (var i = 0; i<=_root.pictures.length; i++) {
                if(i==0)
                {
                        gallery_array.push(path_album+"albums/"+album+"/"+_root.first_photo);
                }
                else
                {
                        gallery_array.push(path_album+"albums/"+album+"/flash/"+_root.first_photo+"/"+_root.pictures[i-1]);
                }       
                        }
                        /* call the displayGallery function which handles loading in each
                          of the gallery images and placing them on the Stage. */
                        displayGallery(gallery_array);
                } else {
                        throw new Error("Unable to parse XML");
                }
        } catch (e_err:Error) {
                trace(e_err.message);
        } finally {
                delete this;
        }
};

// load the gallery.xml file from the current directory.
gallery_xml.load("gallery_tween.xml");

/* create a function which loops through the images in an array,
  and creates new movie clips on the Stage. */
function displayGallery(gallery_array:Array) {
        var galleryLength:Number = gallery_array.length;
       

        // loop through each of the images in the gallery_array.
        for (var i = 0; i<galleryLength; i++) {
               
                /* create a movie clip instance which holds the image. We'll also set a variable,
                  thisMC, which is an alias to the movie clip instance. */
                var thisMC:MovieClip = this.createEmptyMovieClip("image"+i+"_mc", i+1);
               
                /* load the current image source into the new movie clip instance,
                  using the MovieClipLoader class. */
                mcLoader_mcl.loadClip(gallery_array[i], thisMC);
       
        }
        }


// define the MovieClipLoader instance and MovieClipLoader listener Object.
var mcLoader_mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
mclListener.onLoadStart = function(target_mc:MovieClip) {
       
};
// while the content is preloading, modify the width of the progress bar.
mclListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
        var pctLoaded:Number = Math.round(loadedBytes/totalBytes*100);
        if(pctLoaded < 100)
        { 
                        varPercent = (_root.btLoaded + loadedBytes)/(_root.btTotal)*100;
        }
        else
        {
               
                varPercent = (_root.btLoaded + totalBytes)/(_root.btTotal)*100;
_root.btLoaded += totalBytes;

                        }
        //trace("Процент загрузки в "+target_mc+" составляет "+varPercent+"%");
        //Показываем процент загрузки в текстовых полях
        anim_num.num_pr.text = Math.round(varPercent) + "%";
        anim_num.num_kb.text = Math.round(_root.btLoaded) + " of " + Math.round((_root.btTotal))+" "+_root.bTotal + " kb";
        };


Dzhav 04.02.2008 18:25

Кто-нубуть проверял этот скрипт в действии? Потому что мне кажется, что
в представленом коде функция displayGallery() использует один загрузчик "mcLoader_mcl" для всех картинок одновременно.

julie525 04.02.2008 18:51

картинки грузятся нормально, вот только непонятно откуда берется еще 300-400 к, а то как-то непонятно, когда прелоадер показывает, что загружено 137 или 154%. Причем так происходит только в броузере, во флеше ничего лишнего не грузится.

Dzhav 04.02.2008 19:20

Эсли учесть слова iNilsа про потоки загрузки, то интересно, получится ли такой вариант:

Считать все ссылки на картинки в переменную-массив (например linksArray).
Начать загрузку первой картинки через mcLoader_mcl, а когда наступит событие onLoadStart, считать значение picture.getBytesTotal() и доплюсовать его к переменной в которой хранится общий размер файлов (_root.total) , а потом оборвать загрузку с помощью unloadClip, и начать загрузку следущей картинки через тот же mcLoader_mcl и т. д., пока не считаются все размера файлов.
После таких операций в переменной _root.total должен находится размер всех картинок. И можно приступать к нормальной загрузке картинок...

Не слишком ли глупая идея? Хотелось бы узнать мнение опытных флешеров.

zozulay 04.06.2008 23:30

Здравствуйте всем. Кто-нибудь может мне написать код на preloading для flash 8, где шла бы процентная загрузка, а потом переход на следущий кадр.

Зарание спасибо.


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

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