Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Индикатор загрузки
Flash Zone Forum > Macromedia Flash > ActionScript
Серж
blink.gif
Ребят, подскажите ,как индикатор загрузки сделать.
Сайт конечно весит всего ничего да и нэт у меня быстрый но все равно очень мучает этот вопрос, а прочитать нигде не могу....
MustLive
Цитата(Серж @ 27.11.2005 - 22:48)
blink.gif
Ребят, подскажите ,как индикатор загрузки сделать.

Серж

Есть два варианта. С получением точного процента загрузки и без.

В простом случае, создаются два фрейма, которые находят после аплоадера (можно использовать две сцены, одна основная, а перед ней - сцена с прелоадером), один кадр будет в начале нашей основной флешки (называем его "start"), а второй в конце ("end").

Код в кадре с аплоадером следующий:
Код
ifFrameLoaded ("end") {
      gotoAndPlay ("start");
}


Далее мы зацикливаем прелооадер, говорим в следующем кадре вернуться назад. Дабы прелооадер "крутился" пока не сработает условие перехода в основную флешку.

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

В первом кадре ставим код:
Код
onClipEvent (load) {
    total = _root.getBytesTotal();
}

onClipEvent (enterFrame) {
    loaded = _root.getBytesLoaded();
    text = Math.floor(loaded/total*100);
    text = text+"%";
    if (loaded >= total){
  _root.gotoAndStop(2)}
    }
}

И зацикливаем первый кадр. Во втором идёт наша основная флешка. Можно также сделать две сцены (с прелоадером и основной флешкой). Текст с текущим процентом загрузки заносится в переменную text.

Цитата
но все равно очень мучает этот вопрос, а прочитать нигде не могу....

Почитать можете здесь:

http://www.google.ru/search?q=flash+preloader
http://www.google.ru/search?q=flash+%D0%9F...%B4%D0%B5%D1%80

Create a Simple Flash Preloader using basic actionscript
http://www.smartwebby.com/Flash/Flash_simple_preloader.asp
Простой прелоадер. Просто строка "лоадинг". Можно сделать и не строку, а любую другую анимацию.

Делаем прелоадер на Flash (процент загрузки)
http://web-support.ru/articles/14/55_1.shtml
Более сложный прелодаер. Более полно использует возможности акшон скрипт. Получаем точный процент загрузки. Можно кроме простой демонстрации процента, сделать продвинутую анимацию (например часы, в которых стрелка показывает процент загрузки и т.д.).
сашуля
 у меня макромедия МХ6... я сделал флэшку из двух сцен... первая из них- загрузка... она состоит на бум из 6 кадров (0%, 38%, 44%, 58%, 99%, 100%) в первом кадре я использовал описанный вами скрипт:

onClipEvent (load) {
total = _root.getBytesTotal();
}

onClipEvent (enterFrame) {
loaded = _root.getBytesLoaded();
text = Math.floor(loaded/total*100);
text = text+"%";
if (loaded >= total){
_root.gotoAndStop(2)}
}
}

...по истечению этой сцены начинается сама флэшка... при создании загрузки, я не вёл никаких временных расчётов. Я хочу разместить этот ролик на своём сайте. Насколько эта загрузка корректна? можно ли ей доверять? скрипт использованный в первом кадре, даёт гарантию, что переход на вторую сцену не произойдёт до того, как ролик полностью загрузится в экранах у поситителей моего сайта?

MustLive писал:
И зациливаем первый кадр.

Что это значит? Что я не доделал, подскажите пожалуйста? Разве в последнем кадре загрузки не надо использовать никаких скриптов?
tiHo
Цитата(сашуля @ 1.01.2007 - 05:09) *
у меня макромедия МХ6...


ставь 8-ю! smile.gif
MustLive
Цитата
MustLive писал:
И зациливаем первый кадр.

Что это значит? Что я не доделал, подскажите пожалуйста? Разве в последнем кадре загрузки не надо использовать никаких скриптов?

сашуля

Это значит зацикливаем первый кадр (или первую сцену). Букву "к" пропустил. Зацыкливание обязательно, чтобы корректно работал прелодер, и не загружалась основная часть флешки - и лишь после полной загрузки ролика идёт переход на второй кадр (или вторую сцену) с основным содержанием.

сашулька, если по какому-либо описанию не разобрался и/или не заработало сразу, то не поленись wink.gif, почитай другие описания, а также те примеры разработки прелоадеров, ссылки на которые я привел. И особенно могут помочь те примеры, к которым даются исходники. Которые можно посмотреть и разобраться.

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

Чтобы всё работало корректно, и не загружалась основная часть флешки, то нужно использовать зацикливание прелоадера (первого кадра или первой сцены, смотря как ты сделал).

Само зацикливание делается с помочью перехода на первый кадр:
Код
_root.gotoAndStop(1);

Происходит переход на первый кадр (или первый кадр первой сцены).

Цитата
ставь 8-ю!

Можешь и 8й флеш конечно поставить, дабы быть на передовой. В этом году, 2007, кстати, выходит 9й флеш, которого ждём с нетерпением.

Ссылки на 8й флеш, для скачивания, я на форуме приводил. Можно скачать как полную версию с креком, так и триал версию с сайта Адоба, а потом крек найти в Интернете.

Но флеш 6/мх - это моя любимая версия флеша smile.gif. Так что можешь поставить себе обе версии (они могут работать параллельно).
сашуля
 спасибо, обязательно прочту все посты на эту тему...
То есть этот скрипт _root.gotoAndStop(1); просто ставится в последнем кадре загрузки?

Чтобы была полная картина того, что творится в моей флэшке, опишу так:
две сцены:1)загрузка (из шести беспорядочно набранных кадров, имитирующих цифры с процентами лоудинга), 2)флэш-ролик с музыкой (450кб)

в первом кадре загрузки, который называется "0%", я применил эти действия:
onClipEvent (load) {
total = _root.getBytesTotal();
}

onClipEvent (enterFrame) {
loaded = _root.getBytesLoaded();
text = Math.floor(loaded/total*100);
text = text+"%";
if (loaded >= total){
_root.gotoAndStop(2)}
}
}

...а в последнем кадре загрузки, который называется "100%", я применил тот скрипт "Зацикливания", который вы мне дали:
_root.gotoAndStop(1);

...правильно?
MustLive
Цитата
То есть этот скрипт _root.gotoAndStop(1); просто ставится в последнем кадре загрузки?

Да, сашуля, в последний кадр прелоадера.

Цитата
1)загрузка (из шести беспорядочно набранных кадров, имитирующих цифры с процентами лоудинга),

Незачем это делать. Так как при твоём текущем подходе, твои цифры будут зациклено появлятся. Это лишнее, я ведь уже ранее дал пример прелоадера, в котором индикатор предусмотрен.

Строка text = text+"%" означает, что в процессе загрузки флешки, будет постоянно исполнятся этот код и обновляться информация о сотоянии загрузки флешки. Это информация будет обновлятся на экране, в переменной text, которую ты должен присвоить текстовой надписи. Чтобы она отображала текущее значение переменной text.

Цитата
...правильно?

И тогда уже всё будет правильно работать. Хотя возможны различные варианты разработки прелоадера (с использованием общих базовых идей). Можно, например, не индикатор крутить или не один индикатор, а ту же анимацию или даже сделать мини игру в процессе загрузки.

За дополнительной информацией смотри другие темы форума, а также мануалы по прелоадерам в Сети.
сашуля
Цитата(MustLive @ 2.01.2007 - 01:32) *
Незачем это делать. Так как при твоём текущем подходе, твои цифры будут зациклено появлятся.


то есть мои цифры будут повторяться снова и снова, пока ролик не загрузится?!)))

Представляю себе человек ждёт начала ролика и после 100% опять начинается 0% и.т.д... Ты это имел ввиду?
MustLive
Цитата
то есть мои цифры будут повторяться снова и снова, пока ролик не загрузится?!)))

Да именно это я и имел ввиду. Что будет постоянно повторятся одно и тоже, пока не загрузится (и выйдет белибирда).

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

Вариант с процентным индикатором, это классический вариант прелоадера. Можно сделать, на той же основе, ещё один популярный вариант - с полоской загрузки, когда она растёт до 100% (причём нередко полоску и процентный индикатор совмещают). Код несложный, чуток изменится приведённый код (чтобы реализовать полоску, код числового индикатора уже приведён).

Также можно реализовать часы, чтобы по циферблату шёл процесс загрузки. Что пять же несложно (код похожий). Мне доводилось разные далать загрузчики. Ну и вариантов прелоадеров имеется множество. Почитай инфу на форуме и манулы в Сети. И главное сделай и посмотри как это работает, чтобы разобраться.
Rotwang
Цитата(MustLive @ 28.11.2005 - 02:55) *
В первом кадре ставим код:
Код
onClipEvent (load) {
    total = _root.getBytesTotal();
}

onClipEvent (enterFrame) {
    loaded = _root.getBytesLoaded();
    text = Math.floor(loaded/total*100);
    text = text+"%";
    if (loaded >= total){
  _root.gotoAndStop(2)}
    }
}

И зацикливаем первый кадр. Во втором идёт наша основная флешка. Можно также сделать две сцены (с прелоадером и основной флешкой). Текст с текущим процентом загрузки заносится в переменную text.
Почитать можете здесь:

что такое onClipEvent (load)? Каков его аналог в AS3? Это какое-то событие, как я понимаю?
chingachgoog
Цитата(Rotwang @ 16.11.2009 - 17:36) *
что такое onClipEvent (load)? Каков его аналог в AS3? Это какое-то событие, как я понимаю?


В AVM1 onClipEvent (load) оно же MovieClip.onLoad - это событие, когда мувиклип на таймлайне полностью подгрузился и отобразился.

В AVM2 это событие complete у свойства (объекта) loaderInfo экранного объекта.
Rotwang
Цитата(chingachgoog @ 16.11.2009 - 18:19) *
В AVM2 это событие complete у свойства (объекта) loaderInfo экранного объекта.

Так. mad.gif Получается, если у меня в первом кадре флешки находится прелоадер, он загрузится первым. Правильно? Значит, в первом кадре нужно зарегистрировать объект.loader.contentLoaderInfo.addEventListener(Event.COMPLETE, CompleteListener);?
А что же будет объектом? root?
chingachgoog
Cм. второй способ обращения к объекту LoaderInfo
Rotwang
Цитата(chingachgoog @ 16.11.2009 - 20:36) *
Cм. второй способ обращения к объекту LoaderInfo


chingachgoog, что на этом рисунке? sad.gif
Второй способ - Свойство loaderInfo экранного объекта.
Что на этой схеме - мой случай?
К тому же в обычном прелоадере(например для зпгружаемой в SWF картинки) текстовое поле с процентами обновляется в progressListenere, а не в completeListener.

Самое главное, что мне непонятно: Когда мы загружаем картинку во флешку с какого-нибудь URL, мы сначала создаем, например, loader = new Loader(new URLRequest("http://maximumrisk.narod.ru/kremlin.jpg"))
Затем регистрируем 
Код
loader.contentLoaderInfo.addEventListener(Event.INIT, initListener);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListener);

И дальше уже в progressListener можем обновлять текстовое поле с процентами загрузки, и добавлять объект на экран. Это все мне понятно.
А если сама SWF грузится, то для чего делать loader? Ведь нет адреса URL?
chingachgoog
Цитата(Rotwang @ 17.11.2009 - 18:26) *
Что на этой схеме - мой случай?


Синенький слева вверху smile.gif

Цитата(Rotwang @ 17.11.2009 - 18:26) *
К тому же в обычном прелоадере(например для зпгружаемой в SWF картинки) текстовое поле с процентами обновляется в progressListenere, а не в completeListener.


Вопрос был про аналог onClipEvent (load)

Цитата(Rotwang @ 17.11.2009 - 18:26) *
А если сама SWF грузится, то для чего делать loader? Ведь нет адреса URL?


А где там во втором способе лоадер???
Rotwang
Вроде разобрался. Нужно зарегистрировать Event.ENTER_FRAME и во frameListener проверять loaderInfo.bytesTotal и loaderInfo.bytesLoaded?
И когда они сравняются, запускать 2-й кадр, в котором все содержимое флешки и помещается. А пока это условие не наступило, прокручивать прелоадер.
chingachgoog
Цитата(Rotwang @ 18.11.2009 - 18:39) *
Вроде разобрался. Нужно зарегистрировать Event.ENTER_FRAME и во frameListener проверять loaderInfo.bytesTotal и loaderInfo.bytesLoaded?
И когда они сравняются, запускать 2-й кадр, в котором все содержимое флешки и помещается. А пока это условие не наступило, прокручивать прелоадер.


Можно, наверное и так. А можно и без энтерфрейма, а по событию progress.
Проверяйте сами - я пока с AS3 не работаю.
Rotwang
Есть у меня 2 флешки. В обоих в 1 кадре прелоадер. Но в одной из флешек во втором кадре находится тяжелая фотография(чтобы загружалась дольше и видно было, как работает прелоадер), а в другой флешке на втором кадре висит код, который выводит фотки из библиотеки на сцену. Так вот, во флешке с тяжелой фоткой прелоадер включается, а в другой нет. Нажмите для просмотра прикрепленного файла
chingachgoog
Цитата(Rotwang @ 22.11.2009 - 21:36) *
а в другой флешке на втором кадре висит код, который выводит фотки из библиотеки на сцену. Так вот, во флешке с тяжелой фоткой прелоадер включается, а в другой нет. Нажмите для просмотра прикрепленного файла


Это потому, что все фотки находяться в первом кадре smile.gif
(см. Пролеадер програмно, только с учетом того, что в AS3 все еще более геморно)
Rotwang
chingachgoog, это?
Цитата
1) Использовать внешние прелоадеры (самый простой и надежный способ).
2) Обмануть пользователя (сделать псевдозагрузку до текущей, а потом, когда псевдозагрузка догонит настоящую, передать значения настоящей)
3) Экспортировать тяжелые вещи в любой другой фрейм, кроме первого.
Русская версия IP.Board © 2001-2013 IPS, Inc.