Создание прелоадера и URL-locked флеш игры

Декабрь 5th, 2009 автор: Oleg Antipov

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

preloader1

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

preloader2

После этого создаём класс 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. Иначе этот мувик будет грузится в первом кадре и наш прелоадер работать не будет:
preloader3

Ну вот вообщем то и всё. Надеюсь эта информация оказалась для вас полезной.

Весь класс прелоадера можно скачать здесь: http://www.anegmetex.com/devblog/files/preloader.as

Категория: Полезные классы

6 Комментариев

  1. Andrew

    Домен можно получать проще (короче по-крайней мере ;) :

    var localDomainLC:LocalConnection = new LocalConnection();
    var domain:String = localDomainLC.domain;

  2. Oleg Antipov

    Спасибо, попробую этим методом

  3. Проблема с прелоадером | seo

    [...] Сделал по вот этой инструкции прелоадер к своей будущей игре: http://www.anegmetex.com/devblog/200…ed-flesh-igry/ [...]

  4. Разработка flash игр » Blog Archive » Cтруктура игры

    [...] первом кадре располагается прелоадер. Я уже здесь писал как его сделать, поэтому не буду повторятся. [...]

  5. Разработка flash игр » Blog Archive » Прелоадер #2

    [...] моя статья про прелоадер всё ещё довольно читаема, я решил немного дополнить её [...]

  6. Гуф

    if(!isUrl(["anegmetex.com", "www.anegmetex.com"]))
    // Если домен не правильный – выводим сообщение
    //о неправильном URL
    this.txt.text=”BAD URL!”;
    else …

    У меня автоформат от этой хуйни умер. Плохая привычка не ставить скобки даже если всего 1 инструкция используется в блоке.

Оставить комментарий