Создание прелоадера и URL-locked флеш игры
Любая флеш игра загружается не мгновенно, поэтому необходимо отображать процесс загрузки, иначе игрок может подумать что флешка зависла и закроет окно. Сделать прелоадер очень просто. В первом кадре на главной кадровой линейке создаём Movieclip под именем preloader

в этом клипе создаём текстовое поле txt для отображения процента загрузки, а также клип progressbar, содержащий ровно 100 кадров анимации полоски загрузки (не забываем в его первый кадр добавить stop()).

После этого создаём класс AS3 preloader и линкуем его к нашему Movieclip-у preloader.
Класс также будет проверять домен, с которого была запущена флешка. (Функция isUrl для этой проверки была взята от сюда http://www.gamedev.ru/community/fgdh/articles/url_lock_as3). И если домен не совпадает, флешка дальше работать не будет )
Вот весь класс:
package game { import flash.display.MovieClip; import flash.events.*; import flash.text.*; dynamic public class preloader extends MovieClip { public function preloader() { // Используем функцию isUrl для проверки домена, //с которого запущена флешка if(!isUrl(["anegmetex.com", "www.anegmetex.com"])) // Если домен не правильный - выводим сообщение //о неправильном URL this.txt.text="BAD URL!"; else // функция Update обновляет процент загрузки addEventListener(Event.ENTER_FRAME, Update); } //Функция проверки домена с которого была запущена флешка public function isUrl(urls:Array):Boolean { var url:String = stage.loaderInfo.loaderURL; var urlStart:Number = url.indexOf("://")+3; var urlEnd:Number = url.indexOf("/", urlStart); var domain:String = url.substring(urlStart, urlEnd); var LastDot:Number = domain.lastIndexOf(".")-1; var domEnd:Number = domain.lastIndexOf(".", LastDot)+1; domain = domain.substring(domEnd, domain.length); for (var i:int = 0; i < urls.length; i++) if (domain == urls[i]) return true; return false; } public function Update(e : Event):void { var bytesLoaded:Number = stage.loaderInfo.bytesLoaded; var bytesTotal:Number = stage.loaderInfo.bytesTotal; var s:String = ""; var percent:Number = 0; //подсчитываем процент загрузки флешки if (bytesTotal>0) { percent = Math.floor(bytesLoaded/bytesTotal*100); s = percent+"%"; } // обновляем прогресс бар this.txt.text="LOADING... "+s; this.progressBar.gotoAndStop(percent+1); // Если флешка полностью загрузились, //то переходим на второй кадр if (bytesLoaded==bytesTotal || bytesTotal==0) { removeEventListener(Event.ENTER_FRAME, Update); if (parent is MovieClip) (parent as MovieClip).gotoAndStop(2); } } } }
А во втором кадре располагаем собственно всю игру. Незабываем что если у вас в игре есть MovieClip-ы, которые создаются динамически с помощью скрипта, то их надо разместить в невидимой области второго кадра, иначе они просто не загрузятся и отображатся не будут. (А можно и не размещать, подробнее об этом написано здесь)
Не забудте в первом кадре главного таймлайна, где лежин наш клип прелоадера, написать в скрипте “stop();”! Иначе игра будет проскакивать прелоадер.
Также при линковке классов к мовиклипам не забываем снимать галочку Export in first frame. Иначе этот мувик будет грузится в первом кадре и наш прелоадер работать не будет:

Ну вот вообщем то и всё. Надеюсь эта информация оказалась для вас полезной.
Весь класс прелоадера можно скачать здесь: http://www.anegmetex.com/devblog/files/preloader.as
Категория: Полезные классы

Апрель 23rd, 2010 at 10:59
Домен можно получать проще (короче по-крайней мере
:
var localDomainLC:LocalConnection = new LocalConnection();
var domain:String = localDomainLC.domain;
Апрель 23rd, 2010 at 11:25
Спасибо, попробую этим методом
Июль 16th, 2010 at 10:00
[...] Сделал по вот этой инструкции прелоадер к своей будущей игре: http://www.anegmetex.com/devblog/200…ed-flesh-igry/ [...]
Июль 16th, 2010 at 12:21
[...] первом кадре располагается прелоадер. Я уже здесь писал как его сделать, поэтому не буду повторятся. [...]
Сентябрь 13th, 2010 at 18:14
[...] моя статья про прелоадер всё ещё довольно читаема, я решил немного дополнить её [...]
Сентябрь 30th, 2011 at 12:49
if(!isUrl(["anegmetex.com", "www.anegmetex.com"]))
// Если домен не правильный – выводим сообщение
//о неправильном URL
this.txt.text=”BAD URL!”;
else …
У меня автоформат от этой хуйни умер. Плохая привычка не ставить скобки даже если всего 1 инструкция используется в блоке.