Простой внешний прелоадер на 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

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

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

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

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): Zaco
Дата добавления: 2017-02-05
А что означает именно эта строчка:
"simple3d_5.swf?rand=" + new Date().time

Это тернарный оператор ? или что , можете объяснить.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2016-12-03
Как-бы, аналогично, просто предварительно находим путь до swf-ролика:


if(stage.loaderInfo.parameters.path != undefined)
{
path = stage.loaderInfo.parameters.path;
}


А дальше загружаем...
Комментатор
Комментарий добавил(а): Олег
Дата добавления: 2016-12-03
Можно пример кода?
У меня есть на as2, но хотелось бы на as3.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2016-12-03
Да, можно, если есть необходимость сделать универсальный прелоадер для сайта.
Комментатор
Комментарий добавил(а): Олег
Дата добавления: 2016-12-03
Прелоадер работает отлично. Спасибо.
А можно сделать его с переменой, которая будет подгружаться через FlashVars.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-07-13
Stanislav, а прелоадер тестировали на сайте или в Adobe Flash?
Комментатор
Комментарий добавил(а): Stanislav
Дата добавления: 2015-07-12
Добрый день.

Прочитал вашу статью.

http://edapskov.ru/pages.php?id=254

Решил сделать прелоадер по вашему уроку. Всё работает, кроме одного. Проблема в политике безопасности. Почему-то флешки загружаются с любых доменных имён, хотя в crossdomain.xml я прописал только свой домен.

Пример:

import flash.display.Sprite;
import flash.events.*;
import flash.system.LoaderContext;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.system.Security;

Security.allowDomain("my-site.com");
Security.allowInsecureDomain("my-site.com");
Security.loadPolicyFile("http://my-site.com/crossdomain.xml");

var ldr:Loader = new Loader();
var url = "http://fisnyak.ru/post/post93/Light_by_ANDROMEDICH.swf"; // ссылка на внешний ролик
var ldrContext:LoaderContext = new LoaderContext(true);

ldr.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, swf_error_security);
ldr.load(new URLRequest(url),ldrContext);

function swf_error_security(event:SecurityErrorEvent):void {
trace("Ошибка. Файл загружен со стороннего домена!");
stop();
}


Файл crossdomain.xml:

<cross-domain-policy>
<allow-access-from domain="my-site.com" to-ports="*"/>
</cross-domain-policy>


При вставке прелоадера на страницу указал:

[code]<param name=allowscriptaccess value=always />/[code]

Подскажите пожалуйста, в чём может быть дело?
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-09-01
Роман, я и сам не прочь узнать о таких ресурсах :-) Причина простая - это не выгодно. Те удобные ресурсы, которые хранят флеш-ролики (swfcabin.com, megaswf.com), не дают прямых ссылок, так как зарабатывают, как я понял, на рекламе. Есть бесплатные хостинги, которые, иногда, позволяют загрузить большие файлы, но они не очень надёжны и имеют свои ограничения.

Кстати, чтобы загружать файлы с другого сайта, этот прелоадер надо немного модифицировать. Почитайте о политике безопасности флеш-плеера при загрузке файлов (гугл вам выдаст достаточное количество информации).
Комментатор
Комментарий добавил(а): Роман
Дата добавления: 2013-09-01
Проблема в том, что сервер, на котором размещён сайт, не разрешает загружать файлы более 10 Mb. Моя флешка весит 22 Mb, посоветуйте, куда загрузить мою флешку, чтобы можно было использовать ссылку на неё в данном прелоадере?
Добавить комментарий:







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

Идиот-тест

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

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