Пример 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