Пример ActionScript 3 загрузчика
Как всегда неприятности возникают там, где их меньше всего ждешь. Мой старый и проверенный лоадер выругался всеми возможными выражениями, как только я попытался откомпилировать небольшое ActionScrit 3 приложение. Вместо того, чтобы пойти пить пиво пришлось два часа переписывать старый компонент на AS3.
Приложение я делал во Flash, поэтому загрузчику необходимо просто нарисовать TextField с процентом загрузки ролика, а по окончании перейти на второй кадр. Для случая Flex логичнее было бы сделать собственное событие загрузчика и сделать dispatchEvent при завершении загрузки. Но у меня не тот случай. Все просто.
Начнем с конца. В первом кадре Flash мувика нарисуем следующий текст:
import microgames.MGLoader; var _loader:MGLoader = new MGLoader(stage,this,0xff9933); stop();
Первая строчка означает что мой класс загрузчика будет называться MGLoader и находиться рядом с файлом программы в папке microgames. Во второй строчке создается объект MGLoader и в него передается stage, root и цвет загрузчика. И стоп.
В данном случае stage является контейнером флеш плеера, а root - его потомок. В нем находиться главная временная шкала.
Самое сложное позади. Посмотрим как все работает внутри класса:
package microgames{
import flash.display.Stage;
import flash.events.Event;
import flash.display.MovieClip;
import flash.text.TextField
public class MGLoader extends MovieClip {
private var _stage:Stage;
private var _root:MovieClip;
private var _color:uint;
public function MGLoader(stage:Stage,root:MovieClip,color:uint) {
trace("Loader start ...");
this._stage = stage;
this._root = root;
this._color = color;
this._stage.addEventListener(Event.ENTER_FRAME, _handleLoader);
}
private function _handleLoader(event:Event):void {
var loaded:Number=this._stage.loaderInfo.bytesLoaded;
var total:Number=this._stage.loaderInfo.bytesTotal;
var percent:Number=Math.floor(loaded/total*100);
trace(percent+"%");
_updateProgress(percent);
if (loaded>=total) {
this._stage.removeEventListener(Event.ENTER_FRAME, _handleLoader);
this._root.gotoAndPlay(2);
}
}
private function _updateProgress(percent:Number):void{
}
}
}
Stage нам нужен для того чтобы прикрутить к нему слушатель Event.ENTER_FRAME, получить количество загруженных байт и общий размер ролика. Root для перехода на следующий кадр после загрузки ролика.
Функция _updateProgress(percent:Number) может быть произвольной. Внутри нее можно творить все что угодно. В моем случае это будет кружочек с циферками.
Выглядит он вот так:

Файлы, используемые в статье.
Упакованный fla файл и класс загрузчика .zip
Санкт-Петербург Зима 2011
