Иллюстрированный самоучитель по Flash-games

       

Сложные экраны загрузки


Исходный файл: Loader2.fla

На рис. 17.3 видно, что в текстовом поле отображается величина 63%. Вместо такого метода измерения можно сообщать пользователю, сколько байт уже загружено и каков размер всего ролика. Для этого нужно изменить значение loadingmessage, записав следующее:

_root.loadingmessage = int(bytesLoaded/1000) + "kb/" + int(totalFileSize/1000) + "kb";

Тогда вместо 63% вы увидите 90 Kb/143 Kb, что лично мне больше нравится.
Выполняя несложные математические вычисления, вы можете сообщить пользователю, как быстро идет загрузка. Для этого нужно создать переменные, в которых будет храниться количество загруженных байт и время на их загрузку. Теперь вы можете определить скорость загрузки, разделив первую величину на вторую. Это позволит спрогнозировать, сколько времени займет загрузка всего ролика.
Следующий код представлен в ролике Loader2.fla. Он похож на предыдущий фрагмент кода, только здесь на экран выводится еще и дополнительная информация: скорость загрузки и оставшееся время.

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");
}}



Содержание раздела