PDA

Просмотр полной версии : прелоадер


julie525
29.01.2008, 15:00
подскажите, почему в прелоадере не отображаются правильно процент загрузки и общий размер подгружаемых файлов - процент сразу проскакивает на 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/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=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, где шла бы процентная загрузка, а потом переход на следущий кадр.

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