Дополнительно о «прелоадере»
Для успешного освоения этого урока ознакомьтесь с предыдущем
уроком
о прелоадере.
В информацию, которую выводит для
клиента прелоадер можно включить текущую и среднюю скорость
загрузки (bps), примерное время до окончания загрузки ролика
(remainig time) и линейку визуализации загрузки. Но следует
учитывать, что все эти художественные излишества увеличат и
время загрузки самого прелоадера, поэтому их желательно
применять для скрашивания ожидания пользователя, когда ролик и
без того большой.
Загрузим наш старый файл.
Увеличим размеры документа до 500 на 300 px (или какой там вам нравится? Скорее всего поразмеру основного фильма!):
Размещаем три надписи: Current bps (текущая скорость), Average bps (средняя скорость) и Remainig time (осталось времени). Далее помещаем на Scene1 три пустые динамические надписи для вывода значений и назначаем имена переменных для них, например: CurrentField, AverageField и RemainigField:
Для большей "красоты" и развлечения пользователя вставим в наш прелоадер часы (или игрушку типа "крестики-нолики" или "тетрис", но это тема отдельного урока), для чего создадим в TimeLine папку (Folder), а в ней еще 2 слоя (эта приятная возможность появилась в Flash MX - спасибо разработчикам!):
Теперь создадим "линейку" процесса загрузки. Для этого нарисуем вытянутый по горизонтали прямоугольник, контур оставим как есть, а заливку преобразуем в символ. Затем немного уменьшим символ (для красоты) и сместим центр символа влево (чтобы линейка увеличивалась слева направо). Запишем или запомним длинну символа:
В разделе Instance Name назовем символ Line. Теперь наш прелоадер должен выглядеть примерно так:
На этом с "рисованием" закончим. Пора написать немного кода.
В первом кадре слоя PLD помещаем следующий код:
Line._width = 0; |
Устанавливаем длинну "линейки", отображающей процесс загрузки равной 0; |
Total =
_root.GetBytesTotal(); |
Присваиваем переменной Total размер файла в байтах; |
TotalField = Total; |
Выводим значение этой переменной на экран; |
CurS = 0; |
Обнуляем значение переменной, содержащей системное время в секундах; |
Load = 0; |
Обнуляем значение переменной, содержащей количество загруженных байтов ролика; |
E=0; |
Обнуляем значение переменной, содержащей время процесса загрузки ролика в секундах. |
Во втором кадре того же слоя пишем:
B = new Date(); |
Переменной B присваиваем значение системного времени; |
OldS = CurS; |
Сохраняем значение времени в секундах; |
CurS = B.GetSeconds(); |
Получаем новое значение системного времени; |
if (CurS <> OldS)
{ |
Если значения сохраненного и нового системного времени не совпадают (прошла 1 секунда) выполняем следующий код: |
E = E + 1; |
Увеличиваем на 1 значение переменной, содержащей время с начала загрузки ролика в секундах; |
OldLoad = Load; |
Сохраняем значение количества загруженных байтов; |
Load =
_root.GetBytesLoaded(); |
Получаем новое значение количества загруженных байтов; |
if (E <> 0) {Aver = int(Load
/ E);}; |
Если время загрузки ролика в секундах не равно 0, то переменной Aver присваиваем целое значение отношения загруженных байтов ко времени, пршедшему с начала загрузки в секундах (средняя скорость загрузки ролика в байтах/сек.); |
if (Aver <> 0) {Remain =
int(Total / Aver);}; |
Если значение переменной средней скорости загрузки не равно 0, то переменной Remain присваиваем целое значение отношения размера ролика в байтах к средней скорости загрузки (примерное время до окончания загрузки в сек.); |
CurrentField = Load -
OldLoad;}; |
Выводим в текстовое поле CurrentField количество загруженных байтов за последнюю секунду; Конец оператора if; |
RMin = int((Remain - E) /
60); |
Переменной RMin присваиваем целое значение количества минут до окончания загрузки; |
RSec = int(Remain - E - (RMin *
60)); |
Переменной RSec присваиваем целое значение количества секунд до окончания загрузки (за вычетом целых минут); |
RMin = RMin + " m"; |
Добавляем обозначение минут... |
RSec = RSec + " s"; |
...и секунд; |
if (length(RMin) < 4) {RMin =
"0" + RMin;}; |
Если значение минут меньше 10, добавляем спереди символ "0" (для красоты); |
if (length(RSec) < 4) {RSec =
"0" + RSec;}; |
То же самое для секунд; |
RemainingField = RMin + " : " +
RSec; |
Выводим значения минут и секунд, разделенные знаком ":"; |
LoadField = Load; |
Выводим количество загруженных байт; |
Percent = int(Load / Total *
100); |
Переменной Percent присваиваем процент загрузки ролика; |
_root.Line._width = Percent *
4.42; |
Изменяем длинну символа Line в соответствии с процентным значением загрузки ролика. 4.42 - коэффициент масштабирования. Мы его запоминали, когда рисовали линейку загрузки; |
if (Percent < 100)
{AverageField = Aver;}; |
Если ролик не загружен полностью, то выводим среднее значение скорости загрузки; |
PercentField = Percent + "
%"; |
Выводим значение процентной загрузки. |
Третий кадр содержит единственную строчку:
if (load <
Total){gotoAndPlay (2);};
Если ролик не загружен - перейти к кадру 2. Но это было описано в предыдущем уроке. Ничего нового.
Вот, собственно и все. Посмотрите исходный файл. "Навесьте" свой неповторимый дизайн и не забудьте добавить основной фильм!