Суббота, 05.07.2025, 05:19Приветствую Вас Посторонний | RSS
Главная | | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
P R E L O A D E R ( Загрузчик )
GRELIKTIKONДата: Вторник, 05.04.2011, 02:12 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1400
Награды: 0
Репутация: 0
Статус: Offline
http://www.mrflasher.com/webmaster/flashpreloader.html

Рассмотрим реальную ситуацию:

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

Получилось несколько тяжеловато (мегобайта 2-3), ну да это ерунда, зато круто!
Закачали свое чудо на любимый сайт и решили посмотреть, как все это "идет" а "идет" плохо, кадры загружаются рывками, прорисовка странная и голос обрывается, но самое досадное, куда-то пропала вся крутость.

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

Тестирование скорости загрузки:

Во время обычного тестового просмотра Control/Test Movie откройте меню "Control", установите скорость загрузки, например - 14,4 (1,2 Kb/s) и выберите Show Streaming. Фильм начнет проигрываться с самого начала и эмулировать загрузку с выбранной скоростью. Вы можете получить множество полезной информации о времени загрузки кадров, их объеме, если включите окно информации - View/Bandwidth Profiler.

Вы, несомненно, не раз видели сайты, на которых процесс загрузки сопровождается выводом информации о загруженном объеме. Это так называемые предзагрузчики. Они просто незаменимы при размещении своих работ в интернет.

Имеет смысл использовать предзагрузчики во всех случаях, когда объем swf файла более 10-15 кб. .

Проверка загруженного кадра - If Frame Is Loaded (FrameNumber) :

Это уже знакомый Вам условный оператор "If", но в данном случае в качестве условия проверки, служит указание конкретного кадра "FrameNumber".

Рассмотрим его параметры:

Выпадающее меню "Scene" - сцена в которой мы будем делать проверку, по умолчанию стоит значение - текущая сцена, т.е. если у Вас весь фильм состоит из одной сцены то значение менять необязательно.
Frame - здесь мы указываем номер конкретного кадра, имя метки кадра "Label" (что, разумеется удобнее) или, если выберем вариант "Expression", вычисляемое условие (применяется при создании проектов построенных по модульному принципу).

В рабочем виде данный условный оператор, может выглядеть следующим образом:

If Frame Is Loaded (Scene 2, "end")
Go to and Play (Scene 2, "start")
End Frame Loaded
Go to and Play (25)

Предположим, данный скрипт находится на сцене "Scene 1" в конечном, 30-ом кадре.
После того, как закончится проигрывание первого эпизода, т.е. фильм дойдет до 30-го кадра первой сцены, произойдет проверка - "а не загрузилась ли вторая сцена?".
Если нет, то фильм перейдет на 25-й кадр текущей сцены и после того, как условие станет истинным, т.е. вторая сцена будет загружена, произойдет ее запуск.
Пошаговые загрузчики, можно применять, как для маленьких проектов.
Например, Вы создали меню для сайта и хотите, чтобы зритель не видел, как оно прорисовывается, а появлялась уже нарисованная картинка. Так и для очень больших проектов, каждая часть которых длится долго сама по себе (презентации, мультфильмы и т.д.) и возможна загрузка следующей сцены во время проигрывания текущей.

Для проверки загрузки кадра используется framesloaded (внутри указания If) или указание If Frame Is Loaded - чтобы проверить, имеется ли содержание конкретного кадра на локальном диске.
Обычно _framesloaded или If Frame Is Loaded используется для того, чтобы проиграть простенькую анимацию в то время, как остаток клипа загружается из интернета.
Разница между этими двумя указаниями заключается в том, что при использовании If (_framesloaded) вы можете легко добавить указание Else или Else If. Указание If Frame Is Loaded позволяет указать число кадров в простом указании.
Чтобы использовать framesloaded в наборе инструкций (action) который проигрывает короткую анимацию в то время, пока грузится клип:

1. Создайте короткую анимацию которая проигрывается "по кругу" в начале клипа. Например, вы можете создать "петлю", которая все время показывает надпись "идет загрузка..."

2. Создайте набор инструкций (action) для кадра с указанием If Frame Is Loaded, который заставит клип "выпрыгнуть" из анимации после того как загрузятся все кадры и продолжить проигрывание клипа. Например, если в вашем клипе на первом и втором кадре находится анимация (которая крутится между кадрами 1 и 2), следующий action должен находиться на кадре номер 2.

If (_framesloaded)
Go to and Play (3)
Else
Go to and Play (1)
End If

Когда вы создаете указание If Frame is Loaded, Flash автоматически вставляет End If Frame is Loaded в конце указания.

На кадре No 2 пропишите action, который заставит клип возвращаться на кадр No 1: Go to and play (1) Когда загрузится кадр, номер которого указан в указании If Frame is Loaded , второй кадр будет проигнорирован и клип будет проигрываться дальше, начиная с 3 кадра. Указание If Frame is Loaded так же хорошо годится для проверки загрузки части клипа. содержащей особенно крупную картинку или большой звуковой файл.

Обычно указание If Frame Is Loaded используется в наборе инструкций для целого кадра. Но иногда это указание можно использовать и для отдельной кнопки.

Чтобы проверить работу таких указаний, используйте команду Test Movie (в меню control).

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

Команда If Frame Is Loaded имеет следующие параметры:

Frame - обозначает номер кадра, который должен быть полностью загружен прежде чем будет выполняться следующее указание.

Scene - это сцена, содержащая этот кадр.


"Чем ночь темней, тем ярче звёзды"
 
GRELIKTIKONДата: Вторник, 05.04.2011, 20:09 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1400
Награды: 0
Репутация: 0
Статус: Offline
http://demiart.ru/forum/index.php?showtopic=106554

Прелоадер с использованием Flash и ActionScript 3.0.


"Чем ночь темней, тем ярче звёзды"
 
GRELIKTIKONДата: Вторник, 05.04.2011, 20:20 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1400
Награды: 0
Репутация: 0
Статус: Offline
http://demiart.ru/forum/index.php?showtopic=28972

Прелоадер с использованием Flash и ActionScript 1.0.


"Чем ночь темней, тем ярче звёзды"
 
GRELIKTIKONДата: Среда, 13.04.2011, 02:19 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1400
Награды: 0
Репутация: 0
Статус: Offline
Игра имеет размер в сотни килобайт, у некоторых пользователей ее загрузка может занять несколько минут.

Для таких больших роликов разработчики, как правило, создают экраны загрузки во Flash или Shockwave.

1 - Обычно экран загрузки представляет собой первый кадр или сцену ролика, таким образом, это первые данные, которые пройдут через модем пользователя.

2 - Затем на экране появляется надпись "Loading..." (Загрузка), чтобы пользователи знали, что происходит.

3 - Во время загрузки ролика вы можете предоставлять еще какую-либо информацию пользователю. С использованием языка ActionScript можно показывать, какая часть ролика уже загружена или какую часть еще надо загрузить.

Создание полосы загрузки

Полоса, отражающая прогресс загрузки и текстовое поле, сообщают пользователю о том, как проходит загрузка ролика.

Код для этого довольно прост.
С помощью функции getBytesTotal ()
можно определить, каков размер клипа.
Если перед функцией getBytes Total () поставить префикс _root, это позволит выяснить объем всего ролика. Чтобы определить, сколько килобайт уже загружено, надо воспользоваться функцией getBytesLoaded().

В ролике Preloader.fla на рабочем поле находится экземпляр клипа, который представляет собой графический рисунок прямоугольника. Он называется "Progress Bar Fill" (Заполнение полосы загрузки). Этот экземпляр был создан так, чтобы центр клипа располагался в верхнем левом углу прямоугольника. Так как центр клипа находится в верхнем левом углу прямоугольника, свойству _xscale можно присвоить любое значение от 0 до 100, ширина клипа будет изменяться, то есть он будет заполнять область, расположенную справа от его центра.
К экземпляру клипа прикрепите небольшой сценарий, который с помощью функции getBytesLoaded() основной временной шкалы выяснит, сколько байт уже загружено, и в соответствии с этим изменит вид прямоугольника. Когда весь ролик будет загружен, временная шкала перейдет к кадру "complete". В этом кадре появляется сообщение о том, что загрузка завершена. Для того чтобы начать игру, пользователь должен щелкнуть по кнопке, расположенной в этом кадре. Такая кнопка -очень полезный элемент ролика, так как во время долгой загрузки пользователь может не смотреть на монитор, а вы бы не хотели, чтоб он пропустил начало анимации.

"complete" ролик ждет, пока игрок не щелкнет по кнопке, и лишь затем продолжается воспроизведение анимации

Code
onClipEvent(load) {
// Определяем размер файла.
totalFileSize = _root.getBytesTotal();
// Прячем полосу загрузки.
this._xscale = 0;
}
onClipEvent(enterFrame) {
// Выясняем, сколько байт уже загружено.
bytesLoaded = _root.getBytesLoaded();
// Преобразуем это значение в величину от 0 до 1.
amountLoaded = bytesLoaded/totalFileSize;
// Преобразуем полученное значение в величину от 0 до 100.
percentLoaded = int(100*amountLoaded);
// Определяем масштаб полосы загрузки.
this._xscale = percentLoaded;
// Устанавливаем текстовое поле в основной временной шкале.
_root.loadingMessage = percentLoaded + "%";
// Проверяем, все ли уже загружено,
if (amountLoaded >= 1.0) {
_root.gotoAndStopt"complete") ;
}}

Просмотрите ролик Loaderl.fla, чтобы понять, как работает приведенный код. Загрузка выполняется в первой сцене, а остальная часть ролика - во второй. Когда пользователь щелкает по кнопке Play (Начать), с помощью команды play() ролик переходит от кадра "complete" к последующим.
Обратите внимание, что если вы откроете swf-файл Loaderl.fla и просмотрите его во Flash, то увидите немногое. С вашего локального жесткого диска ролик грузится слишком быстро, чтобы можно было увидеть экран загрузки. Вам нужно разместить файл на вашем Web-сайте, а затем просмотреть его с помощью браузера.
Намного проще все-таки использовать возможность Rash эмулировать модемное соединение. В меню окна предварительного просмотра выберете View->Show Streaming (или нажмите Ctrl+Enter) и ролик будет отображаться так же, как если бы он загружался по модемному, то есть очень медленному соединению. Пропускную способность этого виртуального соединения вы можете установить, выбрав пункт меню Debugging в окне предварительного просмотра.

Сложные экраны загрузки
Исходный файл: Loader2.fla

В текстовом поле отображается величина 63%. Вместо такого метода измерения можно сообщать пользователю, сколько байт уже загружено и каков размер всего ролика. Для этого нужно изменить значение loadingmessage, записав следующее:
_root.loadingmessage = int(bytesLoaded/1000) + "kb/" + int(totalFileSize/1000) + "kb";
Тогда вместо 63% вы увидите 90 Kb/143 Kb, что лично мне больше нравится.

Выполняя несложные математические вычисления, вы можете сообщить пользователю, как быстро идет загрузка. Для этого нужно создать переменные, в которых будет храниться количество загруженных байт и время на их загрузку. Теперь вы можете определить скорость загрузки, разделив первую величину на вторую. Это позволит спрогнозировать, сколько времени займет загрузка всего ролика.

Следующий код представлен в ролике Loader2.fla. Он похож на предыдущий фрагмент кода, только здесь на экран выводится еще и дополнительная информация: скорость загрузки и оставшееся время.

Code
onClipEvent(load) {
// Получаем исходную информацию.
totalFileSize = _root.getBytesTotal();
startTime = getTimer О;
startBytes = _root.getBytesLoadedf);
// Прячем полосу загрузки,
this. _xscale = 0;}
onClipEvent(enterFrame) {
// Выясняем, сколько байт уже загружено.
bytesLoaded = _root.getBytesLoaded();
// Преобразуем это значение в величину от 0 до 1.
amountLoaded = bytesLoaded/totalFileSize;
// Преобразуем полученное значение в величину от 0 до 100.
percentLoaded = int(100*amountLoaded);
// Определяем масштаб полосы загрузки.
this._xscale = percentLoaded;
// Определяем скорость загрузки.
timeSoFar = getTimerО - startTime;
speed = bytesLoaded/timeSoFar;
// Выясняем, сколько времени осталось до конца загрузки.
bytesLeft = totalFileSize - bytesLoaded; timeLeft = (bytesLeft/speed)/1000;
// 'Преобразуем полученное значение
// в величину с одной цифрой после запятой.
speed = int(10*speed)/10;
// Устанавливаем текстовые поля.
_root.bytesMessage = int(bytesLoaded/1000) + "kb/" + int(totalFileSize/1000) + "kb";
_root.speedMessage = speed + "k/sec";
_root.timeMessage = int(timeLeft) + " seconds remaining";

Поскольку мы округлили значение timeLeft до целого числа, то в течение последней секунды загрузки в соответствующем окне будет отображаться ноль. Если вас не устраивает такое положение дел, то вы можете округлить это значение до одного или большего количества знаков после запятой.

// Проверяем, все ли уже загружено.
if (amountLoaded >= 1.0) {
_root.gotoAndStop("complete");
}}
Другие типы экранов загрузки

Только что рассмотренные экраны загрузки - стандартные. Кроме них существует множество других вариантов. Самый простой: можно отображать только статический кадр с надписью "Loading, Please Wait..." (Идет загрузка, пожалуйста, подождите...). Когда загрузка будет завершена, ролик просто перейдет следующему кадру.
Этот вариант можно усложнить и поместить какую-либо повторяющуюся анимацию в кадр.
Еще более сложный вариант: каждый кадр будет отображать различные этапы загрузки. Например, будет собираться некая картинка: чем ближе загрузка будет подходить к концу, тем более целостным будет становиться изображение.
Возможно, для создания таких экранов загрузки функции getBytesTotal () и getBytesLoaded () не понадобятся. Вместо них можно воспользоваться функцией ifFrameLoaded (), чтобы узнать, загружены ли все графические объекты определенного кадра. Эта функция пригодится, если вы хотите, чтобы пользователь начал какую-то часть игры, но не смог продолжить до тех пор, пока необходимые кадры не будут готовы.
Но лучше сделать время загрузки полезным для игрока. Например, поместить в кадр руководство к игре. Вместо того чтобы просто сидеть и смотреть, как заполняется полоса загрузки, игрок сможет узнать полезную и необходимую для него информацию.


"Чем ночь темней, тем ярче звёзды"
 
GRELIKTIKONДата: Среда, 13.04.2011, 03:34 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 1400
Награды: 0
Репутация: 0
Статус: Offline
onClipEvent(load) {
// Получаем исходную информацию.
totalFileSize = _root.getBytesTotal();
startTime = getTimer О;
startBytes = _root.getBytesLoadedf);
// Прячем полосу загрузки,
this. _xscale = 0;}
onClipEvent(enterFrame) {
// Выясняем, сколько байт уже загружено.
bytesLoaded = _root.getBytesLoaded();
// Преобразуем это значение в величину от 0 до 1.
amountLoaded = bytesLoaded/totalFileSize;
// Преобразуем полученное значение в величину от 0 до 100.
percentLoaded = int(100*amountLoaded);
// Определяем масштаб полосы загрузки.
this._xscale = percentLoaded;
// Определяем скорость загрузки.
timeSoFar = getTimerО - startTime;
speed = bytesLoaded/timeSoFar;
// Выясняем, сколько времени осталось до конца загрузки.
bytesLeft = totalFileSize - bytesLoaded; timeLeft = (bytesLeft/speed)/1000;
// 'Преобразуем полученное значение
// в величину с одной цифрой после запятой.
speed = int(10*speed)/10;
// Устанавливаем текстовые поля.
_root.bytesMessage = int(bytesLoaded/1000) + "kb/" + int(totalFileSize/1000) + "kb";
_root.speedMessage = speed + "k/sec";
_root.timeMessage = int(timeLeft) + " seconds remaining";


"Чем ночь темней, тем ярче звёзды"
 
  • Страница 1 из 1
  • 1
Поиск:

Disign by Mark © 2025