PDA

Просмотр полной версии : последовательная загрузка картинок/мувиков


edo
05.10.2006, 18:56
нужно, что бы при нажатии на кнопку в контейнер последовательно загружались swf с номерами 00.swf, 01.swf, 02.swf и т.д.

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

подскажите, как это реализовать

Ulya
05.10.2006, 19:17
Посмотри тему "Сменные баннеры", там похоже. Тема в этом же разделе. Может быть чем-то поможет

wvxvw
05.10.2006, 21:12
написать функцию загрузки и вызывать ее setInterval'ом через нужные промежутки времени, название подгружаемой флешки задавать в самой функции загрузки.

BigDan
05.10.2006, 21:22
написать функцию загрузки и вызывать ее setInterval'ом через нужные промежутки времени, название подгружаемой флешки задавать в самой функции загрузки.
setInterval"ом нельзя потому что свфки имеют разный размер, и одна может не успеть загрузится. Лучше делать через MovieClipLoader

wvxvw
05.10.2006, 21:37
2 BigDan:
Зависит от приоритета, что важнее, вовремя сменить картинку, или увидеть все картинки. Способ загрузки в данном случае не важен =) хоть в ХМЛе массив пикселей передавать :P

Kikasso
05.10.2006, 21:47
По интервалу сажаешь itsTime = true
По загрузке isLoaded = true
По обоим событиям if(itsTime && isLoaded)loadNext();

edo
06.10.2006, 16:26
мне НЕ нужно что бы картинки сменялись сами...
я хотел узнать, можно ли упростить обращение к именам файлов. т.е. у меня на кнопку идет скрипт, при нажатии сменяющий картинку на следущую. но у меня допустем не определено, сколько в дальнейшем будет картинок.
любой момент их может стать не 10 а 20...т.е. с 00.свф по 0.9свф, а станет по 19...или потом по 35...
а мне не хочеться менять исходник после каждого добавления картинки.

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

Хемуль
06.10.2006, 17:08
2 edo:
Ну, можете менять не исходник, а загружать извне данные о количестве загружаемых флешек. Например, из XML. Либо загружать по порядку, пока не получите отказ в загрузке.

PS:
Интересно, какой изверг заставляет дизайнеров заниматься программированием? ^_^

edo
06.10.2006, 18:43
2 Хемуль
помогите как нибуть, а то я вскроюсь в ближайшие дни. может знаете где взять похожие исходники?

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

katerinax
07.10.2006, 08:28
edo
Каждый за кого-то отдувается.
Я нахожусь в вечном поиске исходников, если какой путёвый адресс найдёшь скинь мне , пожалуйста

Хемуль
07.10.2006, 10:09
2 edo:
"Вскроюсь"? ^_^ А директор хоть оценит ваши заслуги?
Ладно... Вы решите, как это должно у вас выглядеть. Например, вместе в флешкой у вас может где-то быть текстовый файл с содержимым:

flashes_num=10

Или XML-файл с такой, например, структурой:

<settings>
<setting name="flashes_num" value="10">
</settings>

В первом случае вам необходимы знания метода loadVariables либо класса LoadVars, во втором - знание классов XML и XMLNode...

2 katerinax:
А вы просто ищите исходники, потому что вам приятен сам процесс поиска или ищите что-то конкретное?

wvxvw
07.10.2006, 15:08
2 Хемуль:
Практика показывает, что если человек работает в РА, то работу он делает не для себя, значит он передаст ее заказчику, заказчик в 99 случях из ста не имеет представления о том, что делать с ХМЛями, текстовыми файлами, которые идут "в нагрузку" к флешке, и в одном лучае - структура сайта такая, что отряд хорошо подготовленных веб програмистов за неделю не разберется, откуда грузится флешка и как передать ей что-нибудь =)
Так что лучше просто грузить до победного конца, а еще лучше, не морочить себе голову и запихать все в одну флешку, особенно если сроки поджимают, а разбираться нет времени...

miramax
07.10.2006, 16:19
Всё гораздо проще. Если нумерация строгая, то без хмл можно просто попробовать прогрузить все файлы. Например имеется 26 пронумерованных файлов, но в программе мы не знаем сколько их. Начнём прогружать их последовательно:
00.swf, 01.swf, 02.swf, .... 25.swf
в какой-то момент произойдёт ошибка зугрузки. Значит файлов 26.swf, 27.swf .... не существует. Используй MovieClipLoader что бы контролировать загрузки и поймать ошибки загрузки с несуществующего адреса.

Хемуль
07.10.2006, 20:15
2 wvxvw:
Всяко бывает... Иногда клиентом выступает некоторая вэб-студия заграничная, для которой можно работать по суб-подряду. В таком случае XML вполне проходит, потому как после сдачи проекта разбираться с ним будет та самая студия для их заграничного клиента. ^_^
Также, если правильно и читабельно организовать XML, с ним при наличии небольшого руководства справится системный администратор клиента. Системные администраторы обычно HTML немного знают, а XML на него похож.
Вообще мне немного сложно судить, потому как на руки клиенту XML'и никогда наверное и не сдавал... Да и американцам часто легче заплатить пару долларов за мои несколько минут времени, за которые я подправлю XML. ^_^
Но вообще вы, конечно, правы, неискушённому человеку страшно смотреть на эти треугольные скобочки. ^_^

2 miramax:
Это понятно, но если внешних мувиклипов действительно много, существует вероятность пропустить один в нумерации и тогда загрузка остановится не дойдя до конца... Хотя, в принципе, можно попытаться загрёзить ещё один и, если не вышло, завершить это дело. ^_^ Всё же два мувика пропустить сложнее, чем один. ^_^

miramax
07.10.2006, 23:10
2 miramax:
Это понятно, но если внешних мувиклипов действительно много, существует вероятность пропустить один в нумерации и тогда загрузка остановится не дойдя до конца... Хотя, в принципе, можно попытаться загрёзить ещё один и, если не вышло, завершить это дело. ^_^ Всё же два мувика пропустить сложнее, чем один. ^_^Я могу написать код , который будет определять всё правильно в 99,999999999999% случаях. Только нумерация должна быть строгой. Это кстати и требуется.

1 Загружаем MovieClipLoader'ом мувиклип под номером n
2 Если загрузка прошла успешно, не было ошибок, загружаем мувик n+1

Продолжать пока не возникнет ошибка загрузки с несуществующего урл.
Какие ещё два файла? какой ещё пропуск ты здесь видешь?

Хемуль
07.10.2006, 23:20
2 miramax:
Опять же, это всё понятно. Такой код может написать любой из более-менее продвинутых пользователей этого форума, ничего страшного в нём нет. Но ваш вариант действительно работает для "строгой нумерации". Про два клипа я говорил, подразумевая то, что в цепи загружаемых мувиклипов может быть пробел. Как? - спросите вы? А очень просто. Клиенты - такие существа, на которые полагаться нельзя. ^_^

miramax
07.10.2006, 23:59
2 miramax:
Опять же, это всё понятно. Такой код может написать любой из более-менее продвинутых пользователей этого форума, ничего страшного в нём нет. Но ваш вариант действительно работает для "строгой нумерации". Про два клипа я говорил, подразумевая то, что в цепи загружаемых мувиклипов может быть пробел. Как? - спросите вы? А очень просто. Клиенты - такие существа, на которые полагаться нельзя. ^_^ В первом посте говорилось о строгой нумерации.

Хемуль
08.10.2006, 00:09
2 miramax:
Я знаю. Всегда говорится о чём-то строгом... ^_^ А потом происходят всякие казусы и недоразумения. Считайте, я предложил вариант усовершенствования кода.

n01known
08.10.2006, 00:43
...

Продолжать пока не возникнет ошибка загрузки с несуществующего урл.
Какие ещё два файла? какой ещё пропуск ты здесь видешь?

а можно код мосмотреть про отлов ошибки загрузки с несуществующего урл?
у меня не вышло со всякими try и catch....
:[

miramax
08.10.2006, 00:51
а можно код мосмотреть про отлов ошибки загрузки с несуществующего урл?
у меня не вышло со всякими try и catch....
:[try catch не поможет.
У MoviClipLoader'а есть событие об ошибке. В хелпе все описано

Хемуль
08.10.2006, 03:45
2 n01known:

var loadListener:Object = new Object();

loadListener.onLoadError = function(target_mc:MovieClip, errorCode:String, httpStatus:Number) {
if (errorCode == "URLNotFound")
{
trace("Файл не найден!");
}
}

var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(loadListener);

var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mcLoader.loadClip("http://mysite.com/images/img.jpg", mc);

wvxvw
08.10.2006, 05:38
2 Хемуль:
За какой границой?.. в смысле, границой какой страны? =)
А я вот сдавал и небольшие проекты с использованием ХМЛя (второй линк в подписи, например) не скажу, что ХМЛ там очень прозрачный и доходчивый, но, опять же ничего супер-пупер... убил месяц на объяснения типа "а как оно работает, куда положить, как пути прописать, как редактировать" и т.п. Неутешительный итог - флешка показывает устаревшую информацию по причине - человек которому я объяснял уволился, на его место взяли еще одного, не менее дубового, а у меня начинать все по второму кругу сил уже нет, да и деньги мне уже за проект отдали...
Да, а потом для этих же ребят делал флеш-банеры, ну, казалось бы, чего уж проще из флешВарз передавался адрес + код реферала, код ессно сменный, поэтому пришлось написать руководство по использованию банера. Опять же, каждый третий реферал потом писал "гневные письма в редакцию" типа "паааааачиму банер не работает???"

Хемуль
08.10.2006, 06:11
2 wvxvw:
Да всё та же заграница... США...
А вообще действительно сложно в XML разбираться неискушённому человеку. Ни про какие CDATA ведь не знают наверняка, даже если с тэгами знакомы и XML'я не пугаются. Ломают парсеру глаза... ^_^

wvxvw
08.10.2006, 06:39
Штаты - очень большая страна... и с очень разными людьми... но не смотря на это, практика показывает, что если заказчик, будь он хоть марсианин, может что-то сделать не так с твоей работой, то сделает он как минимум в 2 раза хуже ожидаемого %)
В случае с ХМЛ, 50% пользователей не знают, что его можно редактировать в ноутпаде, у еще 10% есть "продвинутый" ХМЛ-редактор, который напрочь искажает структуру, дописывает свои дурацкие теги, меняет кодировку... ну и еще по мелочам =) Оставшиеся 40% умеют редактировать ХМЛ, но у половины из них дел и так по горло, им некогда, у оставшихся есть дома жена с беременным ребенком и им срочно нужно уходить, или сервер может работать только с одной кодировкой, и ессно не с юникодами, кто-то начнет рассказывать про возможность ДОС-атаки на его любимый сервер с использованием предоставленной флешки и ХМЛя... вобщем, мрак =)
Ладно, все, это уже лирика, прекращаю =)

miramax
08.10.2006, 12:30
у оставшихся есть дома жена с беременным ребенком и им срочно нужно уходить, или сервер может работать только с одной кодировкой, и ессно не с юникодами, кто-то начнет рассказывать про возможность ДОС-атаки на его любимый сервер с использованием предоставленной флешки и ХМЛя... вобщем, мрак =)
Вот-вот, все эти пункты, особенно первый меня убивает - практически через день такое слышу...
Вообще-то рашн юзера гораздо проще чему-то научить, например редактировать хмл. Наверное потому что нашим юзерам нечего делать и много свободного времени.:confused:

edo
10.10.2006, 11:44
блин, читал читал и не понял ни чего))
если и будут изменения в этом сайте, то в 90% они опять лягут на меня.

можно посмотреть исходничек с примером загрузки клипов со строгой нумерацией? мне уже просто для себя интересно в этом разобраться.
а заказчик пусть сосет)) пока делаю тупо подгрузку клипов, где все картинки в кучу

Хемуль
11.10.2006, 04:07
2 edo:
Вот, написал вам пример. Чувствую, за прототипы в коде ругать будут... ^_^ Но это ничего, они по сути просто для демонстрации используются и к загрузке не относятся.
Значит, допустим, у нас есть папка resource в той же папке, в которой лежит флешка. В папке resource лежат 9 файлов: r1.jpg - r9.jpg... Мы ЗНАЕМ, что их 9. О том, как загружать флешки до того, как будет разорвана цепь нумерации, я писал выше. Тут же мы знаем, что их 9 и, если одна не загружается, переходим к загрузке следующей, пока не пройдём все 9. На месте каждой картинки во время загрузки пишутся проценты прогресса. После загрузки мувиклипу назначаются стандартные события.
Структура сцены такая:
- Мувиклип container (общий контейнер для всего)
-- Текстовые поля прогресса загрузки (создаются в процессе загрузки)
-- Мувиклип frame (рамки)
-- Мувиклип movies (контейнер для загружаемых мувиклипов)
--- Мувиклипы movie1 - movie9 (загружаемые мувиклипы)
Вот код:

var movieBaseName:String = "resources/r";
var movieExtension:String = "jpg";
var currentMovie:Number = 1;
var moviesNumber:Number = 9;
var moviesInRow:Number = 3;
var containerClipName:String = "container";
var frameClipName:String = "frame";
var moviesContainerClipName:String = "movies";
var movieContainerClipBaseName:String = "movie";
var progressTextName:String = "progress";
var left:Number = 100;
var top:Number = 100;
var movieWidth:Number = 60;
var movieHeight:Number = 60;
var rowsInterval:Number = 10;
var columnsInterval:Number = 10;
var progressTextWidth:Number = 40;
var progressTextHeight:Number = 20;
var progressTextFont:String = "_sans";
var progressTextSize:Number = 14;

var containerClip:MovieClip = this.createEmptyMovieClip(containerClipName, this.getNextHighestDepth());
containerClip._x = left;
containerClip._y = top;
var moviesContainerClip:MovieClip = containerClip.createEmptyMovieClip(moviesContainerClipName, containerClip.getNextHighestDepth());
containerClip.attachMovie("frame", frameClipName, containerClip.getNextHighestDepth());

var clipsLoader:MovieClipLoader = new MovieClipLoader();
var clipsLoaderListener:Object = new Object();

clipsLoaderListener.onLoadStart = function(targetClip:MovieClip)
{
targetClip._parent.createTextField(progressTextName, targetClip._parent.getNextHighestDepth(), targetClip._x + (movieWidth - progressTextWidth) / 2, targetClip._y + (movieHeight - progressTextHeight) / 2, progressTextWidth, progressTextHeight);
var progressTextFormat:TextFormat = new TextFormat();
progressTextFormat.font = progressTextFont;
progressTextFormat.size = progressTextSize;
targetClip._parent[progressTextName].setNewTextFormat(progressTextFormat);
}

clipsLoaderListener.onLoadComplete = function(targetClip:MovieClip)
{
targetClip._parent[progressTextName].removeTextField();
loadNextMovie();
}

clipsLoaderListener.onLoadInit = function(targetClip:MovieClip)
{
targetClip.onRollOver = function()
{
this.setTransformRGBA(100, 110, 100, 0, -100, 0, 100, 0);
};
targetClip.onRollOut = targetClip.onReleaseOutside = function()
{
this.resetTransformRGBA();
};
targetClip.onRelease = function()
{
trace("MovieClip: " + targetClip);
};
}

clipsLoaderListener.onLoadError = function(targetClip:MovieClip, errorCode:String)
{
targetClip.removeMovieClip();
loadNextMovie();
}

clipsLoaderListener.onLoadProgress = function(targetClip:MovieClip, loadedBytes:Number, totalBytes:Number)
{
var percent:Number = Math.ceil((loadedBytes / totalBytes) * 100);
var progressTextField:TextField = targetClip._parent[progressTextName];
progressTextField._x = targetClip._x + (movieWidth - progressTextField.textWidth) / 2;
progressTextField._y = targetClip._y + (movieHeight - progressTextField.textHeight) / 2
progressTextField.text = percent + "%";
}

function loadNewMovie(movieNumber:Number)
{
var movieName:String = movieBaseName + movieNumber + "." + movieExtension;
var movieContainerClipName:String = movieContainerClipBaseName + movieNumber;
var movieContainerClip:MovieClip = moviesContainerClip.createEmptyMovieClip(movieContainerClipName ,moviesContainerClip.getNextHighestDepth());
movieContainerClip._x = ((movieNumber - 1) % moviesInRow) * (movieWidth + columnsInterval) + columnsInterval;
movieContainerClip._y = Math.floor((movieNumber - 1) / moviesInRow) * (movieHeight + rowsInterval) + rowsInterval;
clipsLoader.loadClip(movieName, movieContainerClip);
}

function loadNextMovie()
{
currentMovie++;
if (currentMovie <= moviesNumber)
{
loadNewMovie(currentMovie);
}
}

MovieClip.prototype.setTransformRGBA = function (ra, rb, ga, gb, ba, bb, aa, ab)
{
if (arguments.length < 8)
{
return false;
}
var x:Number = 0;
while (x < arguments.length)
{
if (isNaN(arguments[x++]))
{
return false;
}
}
if (ra <= 100 && ga <= 100 && ba <= 100 && aa <= 100 && ra >= -100 && ga >= -100 && ba >= -100 && aa >= -100 && rb <= 255 && gb <= 255 && bb <= 255 && ab <= 255 && rb >= -255 && gb >= -255 && bb >= -255 && ab >= -255)
{
var thisColor:Object = {ra:ra, rb:rb, ga:ga, gb:gb, ba:ba, bb:bb, aa:aa, ab:ab};
var col:Color = new Color(this);
col.setTransform(thisColor);
return true;
}
else
{
return false;
}
}

MovieClip.prototype.resetTransformRGBA = function()
{
var thisColor:Object = {ra:100, rb:0, ga:100, gb:0, ba:100, bb:0, aa:100, ab:255};
var col:Color = new Color(this);
col.setTransform(thisColor);
}

clipsLoader.addListener(clipsLoaderListener);
loadNewMovie(currentMovie);

Исходник прикрепляю.

edo
12.10.2006, 12:31
огромное спасибо! =)))
жаль без подробных коментариев, и реализуеться не совсем та задача.
но так куда более понятно, думаю разберусь как её потом под себя приспособить)
если что, спрошу еще)))

Хемуль
12.10.2006, 12:41
2 edo:
Скажите, какой участок кода прокомментировать или дайте более конкретное описание задачи - постараюсь адаптировать для вас.

edo
12.10.2006, 13:19
2 Хемуль
правда?
ой спасибо))
задача была, их не как галерею подгрузить, а просто при нажатии на кнопку заменять друг друга в одном контейнере, и что бы циклически, т.е. когда загрузиться последний, загружался первый.

а что мне не понятно, я на вскидку не скажу...пока даже не со всеми var разобрался...
для меня тут многое непонятно((


очень приятно, что есть люди, которым не плевать и у которых находиться время, что бы помочь другим, даже таким деревянным в програмировании как я)

Хемуль
12.10.2006, 14:08
2 edo:
Ок. Следующий пример.
Код:

var movieBaseName:String = "resources/r";
var movieExtension:String = "jpg";
var currentMovie:Number = 1;
var moviesNumber:Number = 9;
var movieContainerClipBaseName:String = "movie";
var progressTextName:String = "progress";
var left:Number = 100;
var top:Number = 100;
var movieWidth:Number = 60;
var movieHeight:Number = 60;
var progressTextWidth:Number = 40;
var progressTextHeight:Number = 20;
var progressTextFont:String = "_sans";
var progressTextColor:Number = 0xffffff;
var progressTextSize:Number = 14;
var loading:Boolean = false;

var clipsLoader:MovieClipLoader = new MovieClipLoader();
var clipsLoaderListener:Object = new Object();

clipsLoaderListener.onLoadStart = function(targetClip:MovieClip)
{
loading = true;
targetClip._parent.createTextField(progressTextName, targetClip._parent.getNextHighestDepth(), targetClip._x + (movieWidth - progressTextWidth) / 2, targetClip._y + (movieHeight - progressTextHeight) / 2, progressTextWidth, progressTextHeight);
var progressTextFormat:TextFormat = new TextFormat();
progressTextFormat.font = progressTextFont;
progressTextFormat.size = progressTextSize;
progressTextFormat.color = progressTextColor;
targetClip._parent[progressTextName].setNewTextFormat(progressTextFormat);
}

clipsLoaderListener.onLoadComplete = function(targetClip:MovieClip)
{
targetClip._parent[progressTextName].removeTextField();
var previousMovie:Number = (currentMovie == 1 ? 9 : currentMovie - 1);
var previousMovieClipName:String = movieContainerClipBaseName + previousMovie;
clipsLoader.unloadClip(targetClip._parent[previousMovieClipName]);
targetClip._parent[previousMovieClipName].removeMovieClip();
loading = false;
}

clipsLoaderListener.onLoadError = function(targetClip:MovieClip, errorCode:String)
{
targetClip.removeMovieClip();
loadNextMovie();
}

clipsLoaderListener.onLoadProgress = function(targetClip:MovieClip, loadedBytes:Number, totalBytes:Number)
{
var percent:Number = Math.ceil((loadedBytes / totalBytes) * 100);
var progressTextField:TextField = targetClip._parent[progressTextName];
progressTextField._x = targetClip._x + (movieWidth - progressTextField.textWidth) / 2;
progressTextField._y = targetClip._y + (movieHeight - progressTextField.textHeight) / 2
progressTextField.text = percent + "%";
}

function loadNewMovie(movieNumber:Number)
{
var movieName:String = movieBaseName + movieNumber + "." + movieExtension;
var movieContainerClipName:String = movieContainerClipBaseName + movieNumber;
var containerClip:MovieClip = this.createEmptyMovieClip(movieContainerClipName, this.getNextHighestDepth());
containerClip._x = left;
containerClip._y = top;
clipsLoader.loadClip(movieName, containerClip);
}

function loadNextMovie()
{
currentMovie++;
if (currentMovie > moviesNumber)
{
currentMovie = 1;
}
loadNewMovie(currentMovie);
}

function createRectangleMovieClip(newName:String, parentClip:MovieClip, parentClipDepth:Number, newX:Number, newY:Number, newWidth:Number, newHeight:Number, newColor:Number, newAlpha:Number):MovieClip
{
var newClip:MovieClip = parentClip.createEmptyMovieClip(newName, parentClipDepth);
newClip.beginFill(newColor);
newClip.moveTo(0, 0);
newClip.lineTo(newWidth, 0);
newClip.lineTo(newWidth, newHeight);
newClip.lineTo(0, newHeight);
newClip.lineTo(0, 0);
newClip.endFill();
newClip._x = newX;
newClip._y = newY;
newClip._alpha = newAlpha;
return newClip;
}

clipsLoader.addListener(clipsLoaderListener);
loadNewMovie(currentMovie);
var nextButton = createRectangleMovieClip("clip", this, this.getNextHighestDepth(), 80, 200, 100, 20, 0xaaaaaa, 100);
nextButton.createTextField("myText", nextButton.getNextHighestDepth(), (nextButton._width - 80) / 2, (nextButton._height - 20) / 2, 80, 20);
nextButton.myText.autoSize = "center";
nextButton.myText.text = "Load Next";
nextButton.myText.color = 0x000000;

nextButton.onRelease = function()
{
if (!loading)
{
loadNextMovie();
}
}

Исходник прикрепляю.
Вопросы?

edo
12.10.2006, 16:21
ух...ужас, это все один большой вопрос))
%)

я потом спрошу, когда осознаю все целиком и перерою томик-самоучитель и хелп)

Хемуль
12.10.2006, 16:34
2 edo:
Ок, я на досуге постараюсь прокомментировать каждую строчку.

edo
12.10.2006, 18:57
2 Хемуль
я тебе буду очень очень благодарен!
ты хороший человек!

Хемуль
13.10.2006, 02:26
Вот:

// Строка, которая содержит начало пути к файлам загружаемых картинок и
// начало имени каждой картинки. К этой строке потом будет прибавляться
// номер картинки и расширение, таким образом составляя путь к картинке.
var movieBaseName:String = "resources/r";
// Расширение загружаемых картинок.
var movieExtension:String = "jpg";
// Переменная, содержащая номер текущей загруженной/загружаемой картинки.
var currentMovie:Number = 1;
// Общее количество картинок.
var moviesNumber:Number = 9;
// Имя мувиклипа-контейнера для загружаемой картинки.
var movieContainerClipBaseName:String = "movie";
// Имя текстового поля для вывода процентов прогресса загрузки.
var progressTextName:String = "progress";
// Абсцисса левого верхнего угла картинки.
var left:Number = 100;
// Ордината левого верхнего угла картинки.
var top:Number = 100;
// Ширина загружаемых картинок.
var movieWidth:Number = 60;
// Высота загружаемых картинок.
var movieHeight:Number = 60;
// Ширина текстового поля для вывода процентов загрузки.
var progressTextWidth:Number = 40;
// Высота текстового поля для вывода процентов загрузки.
var progressTextHeight:Number = 20;
// Цвет шрифта текстового поля для вывода процентов загрузки.
var progressTextFont:String = "_sans";
// Цвет шрифта текстового поля для вывода процентов загрузки.
var progressTextColor:Number = 0xffffff;
// Размер шрифта текстового поля для вывода процентов загрузки.
var progressTextSize:Number = 14;
// Булева переменная, показывающая, идёт ли сейчас загрузка картинки.
var loading:Boolean = false;

// Создаём обьект MovieClipLoader для загрузки картинок.
var clipsLoader:MovieClipLoader = new MovieClipLoader();
// Создаём listener для созданного обьекта MovieClipLoader.
var clipsLoaderListener:Object = new Object();

// Событие, которое вызывается на начало загрузки мувиклипа.
clipsLoaderListener.onLoadStart = function(targetClip:MovieClip)
{
// Устанавливаем значение loading в true, говоря тем самым,
// что началась загрузка.
loading = true;
// Создаём текстовое поле для вывода прогресса загрузки.
targetClip._parent.createTextField(progressTextName, targetClip._parent.getNextHighestDepth(), targetClip._x + (movieWidth - progressTextWidth) / 2, targetClip._y + (movieHeight - progressTextHeight) / 2, progressTextWidth, progressTextHeight);
// Создаём обьект TextFormat для текстового поля прогресса.
var progressTextFormat:TextFormat = new TextFormat();
// Устанавливаем для TextFormat шрифт.
progressTextFormat.font = progressTextFont;
// Устанавливаем для TextFormat размер шрифта.
progressTextFormat.size = progressTextSize;
// Устанавливаем для TextFormat цвет.
progressTextFormat.color = progressTextColor;
// Назначаем текстовому полю новое форматирование.
targetClip._parent[progressTextName].setNewTextFormat(progressTextFormat);
}

// Событие, которое вызывается после окончания загрузки.
clipsLoaderListener.onLoadComplete = function(targetClip:MovieClip)
{
// Удаляем из загруженного мувиклипа текстовое поле прогресса загрузки.
targetClip._parent[progressTextName].removeTextField();
// Определяем номер картинки, которая была загружена перед той,
// которая загрузилась сейчас.
var previousMovie:Number = (currentMovie == 1 ? moviesNumber : currentMovie - 1);
// Формируем имя мувиклипа картинки, которая была загружена перед той,
// которая загрузилась сейчас.
var previousMovieClipName:String = movieContainerClipBaseName + previousMovie;
// Удаляем мувиклип картинки, которая была загружена перед той,
// которая загрузилась сейчас.
targetClip._parent[previousMovieClipName].removeMovieClip();
// Устанавливаем значение loading в false, показывая тем самым,
// что загрузка окончена.
loading = false;
}

// Событие, которое вызывается при ошибке загрузки картинки.
clipsLoaderListener.onLoadError = function(targetClip:MovieClip, errorCode:String)
{
// Если возникла ошибка, удаляем пустой мувикли-контейнер, который был
// создан для загрузки данной картинки.
targetClip.removeMovieClip();
// Переходим к загрузке следующей картинки.
loadNextMovie();
}

// Событие, которое вызывается во время загрузки картинки.
clipsLoaderListener.onLoadProgress = function(targetClip:MovieClip, loadedBytes:Number, totalBytes:Number)
{
// Определяем проценты прогресса загрузки.
var percent:Number = Math.ceil((loadedBytes / totalBytes) * 100);
// Получаем ссылку на текстовое поле прогресса загрузки.
var progressTextField:TextField = targetClip._parent[progressTextName];
// Выравниваем текстовое поле прогресса горизонтально по центру
// относительно мувиклипа-контейнера данной загружаемой картинки.
progressTextField._x = targetClip._x + (movieWidth - progressTextField.textWidth) / 2;
// Выравниваем текстовое поле прогресса вертикально по центру
// относительно мувиклипа-контейнера данной загружаемой картинки.
progressTextField._y = targetClip._y + (movieHeight - progressTextField.textHeight) / 2
// Передаём текстовому полю строку с процентами загрузки.
progressTextField.text = percent + "%";
}

// Функция загрузки новой картинки.
// movieNumber - номер новой картинки, которую нужно загрузить.
function loadNewMovie(movieNumber:Number)
{
// Строка с путём и именем файла загружаемой картинки.
// Формируется из пути с именем, номера и расширения картинки.
var movieName:String = movieBaseName + movieNumber + "." + movieExtension;
// Формируем имя нового мувиклипа-контейнера для загружаемой картинки.
var movieContainerClipName:String = movieContainerClipBaseName + movieNumber;
// Создаём новый мувиклип-контейнер для загружаемой кратинки.
var containerClip:MovieClip = this.createEmptyMovieClip(movieContainerClipName, this.getNextHighestDepth());
// Устанавливаем _x для мувиклипа-контейнера загружаемой картинки.
containerClip._x = left;
// Устанавливаем _y для мувиклипа-контейнера загружаемой картинки.
containerClip._y = top;
// Начинаем загрузку картинки в созданный мувиклип-контейнер.
clipsLoader.loadClip(movieName, containerClip);
}

// Функция загрузки следующей картинки.
function loadNextMovie()
{
// Инкрементируем номер загружаемой картинки.
currentMovie++;
// Если номер картинки больше общего количества картинок...
if (currentMovie > moviesNumber)
{
// ...начинаем отсчёт с первой картинки.
currentMovie = 1;
}
// Загружаем новую картинку с текущим номером currentMovie.
loadNewMovie(currentMovie);
}

// Функция создания прямоугольного мувиклипа. Создана для примера.
// В последствии используется просто для создания кнопки и к загрузке
// картинок отношения не имеет.
// ПАРАМЕТРЫ:
// newName - имя создаваемого мувиклипа.
// parentClip - ссылка на родительский мувиклип, в котором создаётся данный.
// parentClipDepth - глубина создаваемого мувиклипа в родительском мувиклипе.
// newX - абсцисса создаваемого мувиклипа в родительском.
// newY - ордината создаваемого мувиклипа в родительском.
// newWidth - ширина создаваемого мувиклипа.
// newHeight - высота создаваемого мувиклипа.
// newColor - цвет создаваемого мувиклипа.
// newAlpha - прозрачность создаваемого мувиклипа.
function createRectangleMovieClip(newName:String, parentClip:MovieClip, parentClipDepth:Number, newX:Number, newY:Number, newWidth:Number, newHeight:Number, newColor:Number, newAlpha:Number):MovieClip
{
// Создаём пустой мувиклип в родительском мувиклипе.
var newClip:MovieClip = parentClip.createEmptyMovieClip(newName, parentClipDepth);
// Начинаем закраску мувиклипа установленным цветом.
newClip.beginFill(newColor);
// Двигаем перо в начало координатной сетки.
newClip.moveTo(0, 0);
// Рисуем верхнюю границу.
newClip.lineTo(newWidth, 0);
// Рисуем правую границу.
newClip.lineTo(newWidth, newHeight);
// Рисуем нижнюю границу.
newClip.lineTo(0, newHeight);
// Рисуем левую границу.
newClip.lineTo(0, 0);
// Завершаем закраску, получив прямоугольник с установленными размерами.
newClip.endFill();
// Передвигаем созданный мувиклип в заданную координату _x.
newClip._x = newX;
// Передвигаем созданный мувиклип в заданную координату _y.
newClip._y = newY;
// Задаём созданному мувиклипу установленную прозрачность.
newClip._alpha = newAlpha;
// Возвращаем ссылку на созданный мувиклип.
return newClip;
}

// Назначаем listener для обьекта MovieClipLoader.
clipsLoader.addListener(clipsLoaderListener);
// Начинаем загрузку первой картинки, которая будет загружена в начале.
loadNewMovie(currentMovie);
// Создаём прямоугольный мувиклип для кнопки.
var nextButton = createRectangleMovieClip("clip", this, this.getNextHighestDepth(), 80, 200, 100, 20, 0xaaaaaa, 100);
// Создаём в прямоугольном мувиклипе текстовое поле.
nextButton.createTextField("myText", nextButton.getNextHighestDepth(), (nextButton._width - 80) / 2, (nextButton._height - 20) / 2, 80, 20);
// Задаём центрирование текста в текстовом поле.
nextButton.myText.autoSize = "center";
// Устанавливаем текст для текстового поля. Это подпись на кнопке.
nextButton.myText.text = "Load Next";
// Устанавливаем цвет шрифта в текстовом поле.
nextButton.myText.color = 0x000000;

// Назначаем для созданной кнопки событие, которое вызывается при нажатии.
nextButton.onRelease = function()
{
// Если сейчас не идёт загрузка картинки...
if (!loading)
{
// ...загружаем следующую картинку.
loadNextMovie();
}
}

Исходник прикрепляю...

edo
13.10.2006, 12:08
супер! теперь не все так загадочно)))
может еще возникнут вопросики по мелочам, но надеюсь нет.
еще раз огромный человеческий сенкс!

Хемуль
13.10.2006, 12:14
2 edo:
Пусть лучше возникают. Порой мелочь в последствии оказывается не такой уж мелочью...