![]() |
|
||||||||||
|
|||||
|
[+4 01.02.08]
Регистрация: Jan 2008
Сообщений: 9
|
вот и не думала, что прелоадер для нескольких файлов настолько сложен. Странно, что флеш неприспособлен для такой задачи.
|
|
|||||
|
[+4 01.02.08]
Регистрация: Jan 2008
Сообщений: 9
|
ну как я думала - запускаешь загрузку файлов, ставишь прелоадер и нет проблем.
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
Жизнь прекрасна?
![]() Для создания общего прелоадера флеш должен знать общий размер файлов. Для этого он должен получит первоначальный ответ на запрос к серверу, без этого не куда. Но все запросы проходят через браузер, которые регулирует число одновременных потоков загрузки. И таких потоков может быть у каждого браузеру разное. Я вот знаю про IE, у него их два. То есть, когда вы собираетесь загрузить 40 картинок и делаете одновременный запрос ко всем, с надеждой подсчитать общий размер, на самом дела к серверу уходит только два запроса и пока вы не получите первых две картинки, остальные запросы будут стоять в очереди. |
|
|||||
|
[+4 01.02.08]
Регистрация: Jan 2008
Сообщений: 9
|
Общий размер файлов я передаю из php через переменные. Через
считаю процент, во флеше все работает нормально, но в IE откуда-то появляется еще 300 K, а в opera - 400 K. Т.е. если размер общий загружаемых файлов 1.1 М, то грузится - 1.4 - 1.6 М. Не понимаю как тогда считать размер загружаемых файлов. |
|
|||||
|
[+4 01.02.08]
Регистрация: Jan 2008
Сообщений: 9
|
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";
};
Последний раз редактировалось julie525; 04.02.2008 в 18:02. |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 35
|
Кто-нубуть проверял этот скрипт в действии? Потому что мне кажется, что
в представленом коде функция displayGallery() использует один загрузчик "mcLoader_mcl" для всех картинок одновременно.
__________________
qubstudio.com |
|
|||||
|
[+4 01.02.08]
Регистрация: Jan 2008
Сообщений: 9
|
картинки грузятся нормально, вот только непонятно откуда берется еще 300-400 к, а то как-то непонятно, когда прелоадер показывает, что загружено 137 или 154%. Причем так происходит только в броузере, во флеше ничего лишнего не грузится.
|
|
|||||
|
Регистрация: Jan 2008
Сообщений: 35
|
Эсли учесть слова iNilsа про потоки загрузки, то интересно, получится ли такой вариант:
Считать все ссылки на картинки в переменную-массив (например linksArray). Начать загрузку первой картинки через mcLoader_mcl, а когда наступит событие onLoadStart, считать значение picture.getBytesTotal() и доплюсовать его к переменной в которой хранится общий размер файлов (_root.total) , а потом оборвать загрузку с помощью unloadClip, и начать загрузку следущей картинки через тот же mcLoader_mcl и т. д., пока не считаются все размера файлов. После таких операций в переменной _root.total должен находится размер всех картинок. И можно приступать к нормальной загрузке картинок... Не слишком ли глупая идея? Хотелось бы узнать мнение опытных флешеров.
__________________
qubstudio.com |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|