Простой внешний прелоадер на ActionScript 3.0

Продолжаю тему прелоадеров на ActionScript. Но на этот раз создадим простейший внешний прелоадер на ActionScript 3.0. Принцип работы внешнего предзагрузчика flash-роликов прост: ролик-прелоадер загружает внешний флеш-ролик (точно также, как если бы он загружал картинку или текстовый документ) и отображает процесс загрузки.

Внешне это будет выглядеть следующим образом (в данном примере загрузки swf-ролика не происходит, а только показывается зацыкленная анимация самого прелоадера):

Достоинством внешнего флеш-прелоадера является то, что он более точно отображает процесс загрузки swf-ролика. Нет такой временной задержки между началом отображения flash-ролика и началом работы предзагрузчика, которая наблюдается в случае использования встроенного прелоадера. Есть, конечно, и свои недостатки (так, например, у многих внешних прелоадеров наблюдаются проблемы с правильным позиционированием, масштабированием загруженных роликов и т. д.).

Итак, приступим к написанию кода (пояснения даны в виде комментариев в коде)...

Код ActionScript 3.0:

/* импорт классов */ import flash.display.Sprite; import flash.display.Loader; import flash.display.LoaderInfo; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.SecurityErrorEvent; import flash.events.ProgressEvent; import flash.net.URLRequest; /* устанавливаем значение переменных */ var w:uint = 200;// ширина прелоадера var h:uint = 10;// высота прелоадера var containerColor:uint = 0xffffff;// цвет фона var preloaderColor:uint = 0xcccccc;// цвет фона прелоадера var bandColor:uint = 0x333333;// цвет индикатора загрузки /* рисуем контейнер */ var container:Sprite = new Sprite(); container.graphics.beginFill(containerColor,1); container.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight); container.graphics.endFill(); addChild(container); /* рисуем контейнер прелоадера */ var preloaderContainer:Sprite = new Sprite(); preloaderContainer.graphics.lineStyle(1,bandColor,1); preloaderContainer.graphics.beginFill(preloaderColor,1); preloaderContainer.graphics.drawRect(0,0,w,h); preloaderContainer.graphics.endFill(); container.addChild(preloaderContainer); /* помещаем наш прелоадер на середину флеш-ролика */ preloaderContainer.x = (stage.stageWidth - w) / 2; preloaderContainer.y = (stage.stageHeight - h) / 2; /* рисуем индикатор загрузки */ var band:Sprite = new Sprite(); band.graphics.beginFill(bandColor,1); band.graphics.drawRect(0,0,w,h); band.graphics.endFill(); preloaderContainer.addChild(band); band.scaleX = 0; /* загружаем ролик и отслеживаем основные события (какие события отслеживать и как на них реагировать вы решите сами, но, как минимум нам необходимо следить за COMPLETE и PROGRESS) */ var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onIOError); loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecurityError); loader.load(new URLRequest("content/simple3d_5.swf")); /* если надо, чтобы загружаемые флеш-ролики не кэшировались, то можно так: loader.load(new URLRequest("simple3d_5.swf?rand=" + new Date().time)); */ /* обработчики событий */ function onComplete(event:Event):void { /* удаляем прелоадер */ container.removeChild(preloaderContainer); /* добавляем загруженный ролик на сцену */ container.addChild(loader); } function onIOError(event:IOErrorEvent):void { trace("IOErrorEvent"); } function onSecurityError(event:SecurityErrorEvent):void { trace("SecurityErrorEvent"); } function onProgress(event:ProgressEvent):void { var percent:Number = event.bytesLoaded / event.bytesTotal; band.scaleX = percent; }

Результат:

Скачать исходники к данному уроку можно по следующей ссылке - скачать исходники (под Adobe Flash CS5).

Автор: admin

Дата добавления: 2013-04-01

Просмотров: 6664

Рейтинг поста: +9-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): Олег
Дата добавления: 2017-04-13
Всё равно большое вам спасибо, отличный сайт. :-)
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2017-04-12
А вот на этот вопрос у меня нет правильного ответа.
Комментатор
Комментарий добавил(а): Олег
Дата добавления: 2017-04-11
Тут назрел ещё вопрос.
Все фшеш ролики разного размера.
Можно как нибудь справится с масштабированием., чтоб подгружаемый ролик не обрезался.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2017-04-11
Пожалуйста.
Комментатор
Комментарий добавил(а): Олег
Дата добавления: 2017-04-11
Огромное спасибо, всё отлично работает. :-)
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2017-04-11
Значит, где-то есть ошибка. У меня работает: edapskov.ru/content/primitive_external_preloader_as3_2.zip
Комментатор
Комментарий добавил(а): Олег
Дата добавления: 2017-04-11
Переменная, которая будет подгружаться через FlashVars.
Ставлю ваш код немного выше загрузки флеш ролика.
if(stage.loaderInfo.parameters.path != undefined)

{

path = stage.loaderInfo.parameters.path;

}


Вместо content/simple3d_5.swf ставлю path
На html странице в коде прописываю
<param name="FlashVars" value="path=123.swf">
Но прелоадер не подгружает флешку.123.swf
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2017-04-11
Здравствуйте. Вы про какую переменную спрашиваете?
Комментатор
Комментарий добавил(а): Олег
Дата добавления: 2017-04-11
Здравствуйте снова.
Если вас не затруднит, можно поподробней код с переменой. Бьюсь над ним уже давно и не выходит.
Спасибо.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2017-02-05
Нет, это простой трюк, который позволяет скачивать свежий файл, а не закэшированный.
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Страница 1 из 2: 12
Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика