Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.02.2010, 16:19
Александр вне форума Посмотреть профиль Отправить личное сообщение для Александр Найти все сообщения от Александр
  № 1  
Ответить с цитированием
Александр
 
Аватар для Александр

Регистрация: Oct 2009
Сообщений: 148
Отправить сообщение для Александр с помощью ICQ
По умолчанию прелоудер на флеш девелоп, опаздыват (

Всем привет!
Юзаю стандартный прелоудер,который генерит флешдевелоп,

он начинает отображаться только с 70 процентов

оно и понятно (
но тут же нельзя медию положить на 3 кадр? или можно?
как советают в ксэцоы?
или как это сделать?


Код AS3:
package 
{
	import flash.display.Bitmap;
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.text.TextField;
	import flash.utils.getDefinitionByName;
	import game.Media;
	import game.Define;
	import orlax.core.Utils;
	import flash.text.TextFieldAutoSize;
	import flash.display.BlendMode;
 
	public class Preloader extends MovieClip 
	{
		[Embed(source='../Build/lib/Loader.png')]
		static public var loaderIMG:Class;
 
		protected var loaderSPR:Sprite = null;
 
		public function Preloader() 
		{
			addEventListener(Event.ENTER_FRAME, checkFrame);				
			// show loader				
			this.graphics.beginFill(0xa0aaf7);
			this.graphics.drawRect(0,0, Define.SCREEN_WIDTH, Define.SCREEN_HEIGHT);			
			this.graphics.endFill();				
			var spr:Sprite = new Sprite();
			addChild(spr);
			loaderSPR = spr;
			spr.graphics.beginFill(0xffffff);
			spr.graphics.drawRect(-1, -1, 253, 16);			
			spr.graphics.endFill();
			spr.x = Define.SCREEN_WIDTH/2 - spr.width / 2;
			spr.y = Define.SCREEN_HEIGHT/2 - spr.height / 2;			
			var img:Bitmap = new loaderIMG();
			addChild(img);
			img.x = Define.SCREEN_WIDTH/2 - img.width / 2;
			img.y = Define.SCREEN_HEIGHT/2 - img.height / 2;			
			drawProgress(0);
		}
 
		private function drawProgress(prc:Number):void		
		{
			loaderSPR.graphics.beginFill(0x374375);
			loaderSPR.graphics.drawRect(-1, -1, 253 * prc, 16);			
			loaderSPR.graphics.endFill();				
		}
 
		public  function isUrl(urls:Array):Boolean 
		{		
			var domain:String = getUrl();
			for (var i:int = 0; i < urls.length; i++) 			
			{
				if (domain == urls[i]) 	return true;				
			}
			return false;
		}
		public  function getUrl():String 
		{
			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);
			return domain;
		}
 
		private function checkFrame(e:Event):void 
		{
			// update loader			  
			if (currentFrame == totalFrames) 
			{
				removeEventListener(Event.ENTER_FRAME, checkFrame);				
				startup();
			}
			else
			{
				drawProgress((loaderInfo.bytesLoaded * 100 / loaderInfo.bytesTotal)/100);	
			}
		}	
 
		private function startup():void 
		{
			Media.load();		
			stop();		
			if (isUrl(["","flashgamelicense.com"]))
			{
				var mainClass:Class = getDefinitionByName("Main") as Class;
				addChild(new mainClass() as DisplayObject);
			}
			else
			{
				var txt:TextField = new TextField();
				txt.text = "[" + getUrl() + "]\nError: this URL not found";				
				txt.setTextFormat(Media.textFormatCenter);			
				txt.selectable = false;
				txt.autoSize = TextFieldAutoSize.CENTER;
				addChild(txt);	
				txt.scaleX = txt.scaleY = 2;
				txt.x = Define.SCREEN_WIDTH / 2 - txt.width / 2;					
				txt.y = Define.SCREEN_HEIGHT / 2 - txt.height / 2;			
				//drawProgress(0.5);
				txt.blendMode = BlendMode.INVERT;
			}
		}
 
	}
 
}

Старый 07.02.2010, 17:08
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
оно и понятно (
Совершенно не понятно. Прелоадер ФД прекрасно работает, использовал уже много раз. Проверьте Ваши импорты - если в Прелоадере загружается весь контент флэшки, то конечно Вы получите 70% на старте. По данному коду трудно сказать, в частности что такое Media.load() ? Может, у Вас в "оставшейся" флэшке и нет больше ничего, а весь контент подгружается с сервера? Прелоадер ведь о нем не знает.. Вобщем, расскажите чуть больше о структуре, или исправьте сами, если заметили где происходит импорт всего "остального" в прелоадер. Весь контент должен появляться в классе Main, который не импортится в Прелоадер.(!)
__________________
Reality.getBounds(this);

Старый 07.02.2010, 18:18
Александр вне форума Посмотреть профиль Отправить личное сообщение для Александр Найти все сообщения от Александр
  № 3  
Ответить с цитированием
Александр
 
Аватар для Александр

Регистрация: Oct 2009
Сообщений: 148
Отправить сообщение для Александр с помощью ICQ
oO ясненько!

структура такая)

есть класс Media
в нем статические классы ембеды

к примеру так

Код AS3:
class Media
{
public static var images:Array=[];
[embed .....'jpg'..]
protected static img1:Class;
}

а в Лоад
просто создается по одному экземляру
типо
Код AS3:
image.push([name,new img1()]);

Старый 07.02.2010, 19:46
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну вот и ответ. То есть все это добро у Вас грузится в первый кадр Прелоадера. Отсюда и 70% на старте.
__________________
Reality.getBounds(this);

Старый 07.02.2010, 20:01
Александр вне форума Посмотреть профиль Отправить личное сообщение для Александр Найти все сообщения от Александр
  № 5  
Ответить с цитированием
Александр
 
Аватар для Александр

Регистрация: Oct 2009
Сообщений: 148
Отправить сообщение для Александр с помощью ICQ
угу я таки в первом посте и написал!

а как во флеш девелопе грузить не на первый? мне не ясно! как быть?

Добавлено через 1 минуту
может
типо в прелоудере где чек фрейм?
написать если кадр==2?
но мне не ясно сколько в прелоудере кадров, и откуда они беруться (

Старый 07.02.2010, 21:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Не надо импортить в него классы, не участвующие в самом прелоадере. Например - Media. Я же написал - весь контент должен импортироваться в класс Мейн. Прелоадер вообще не должен знать, что они существуют, эти классы, картинки, звуки и все прочее, чего он сам не показывает. В прелоадере должно быть ТОЛЬКО то, что визуализирует сам прелоадер. Все остальное запускается, когда на сцену помещается Мейн. Знать о них должен только Мейн, не Прелоадер. Вы должны рассматривать их как две разных флэшки:
Сначала загружаются все элементы, необходимые для показа первого кадра - Прелоадера, и он отображается. Проигрывающая головка таймлайна переходит на второй кадр - checkFrame определяет что этот кадр - последний. Выполняется
Код:
addChild(new mainClass() as DisplayObject);
плеер НАХОДИТ класс Мейн и начинает загружать все, что "упоминается" в нем - вот здесь и начинается загрузка основного контента, при этом Прелоадер уже работает и показывает эту загрузку (точнее генерит события прогресса загрузки, а уж что там показывается и как - определяете Вы в обработчиках) - и продолжается до тех пор, пока не загрузится все необходимое для показа "второго кадра" - то есть, вся флэшка целиком. Когда все загрузится, мувиклип Прелоадера покажет этот кадр. А в этом кадре - собственно все Ваше приложение. Вот, грубо, схема работы этого прелоадера. Если еще грубее - первый кадр это класс Прелоадер, а второй кадр - класс Мейн. Всю тяжелую артиллерию Вы должны инициировать только в Мейн, а в Прелоадере - только то что нужно Прелоадеру.
__________________
Reality.getBounds(this);

Старый 07.02.2010, 23:37
Александр вне форума Посмотреть профиль Отправить личное сообщение для Александр Найти все сообщения от Александр
  № 7  
Ответить с цитированием
Александр
 
Аватар для Александр

Регистрация: Oct 2009
Сообщений: 148
Отправить сообщение для Александр с помощью ICQ
Спасибо огромное, сейчай попробую)

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:05.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:05.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.