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

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

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
По умолчанию Прелоадер - мгновенное появление.

Создаю pure AS3 проект. На выходе флэшка всего 450 кБ. Сначала делал вообще без прелоадера. Но при открытии в браузере флэшка появляется только на 4-5 секунде. Непонятно от чего это.
Решил добавить прелоадер. В флэшке из 450 кБ - 3/4 это ресурсы: графика (jpg, png, swf) и звуки (mp3).

Читаю здесь как правильно добавлять прелоадер.
Теперь у меня в корне проекта появляются три класса: Main, Preloader и App.
Почти все как в статье по ссылке (вторая часть где без Flash IDE) только добавил SWF которая отображает процесс загрузки цифрами. Вот сам класс Preloader.as

Код AS3:
package 
{
	import flash.display.BlendMode;
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.utils.getDefinitionByName;
	import flash.events.ProgressEvent;
 
	[SWF(width="500", height="700", frameRate="30")]
	public class Preloader extends MovieClip 
	{
		[Embed(source = 'lib/preloader.swf', symbol = 'progressbar')]
		private var progressBarClass:Class
		[Embed(source = 'lib/preloader.swf', symbol = 'percent')]
		private var percentDisplayClass:Class
 
		private var preloadGraphic:Sprite = new Sprite();
		private var progressBar:Sprite = new progressBarClass();
		private var percentDisplay:Sprite = new percentDisplayClass();
		private var percent:TextField;
		[Embed(source="images/afisha_4.png")]
		public var Afisha:Class;
		public function Preloader() 
		{
			addEventListener(Event.ENTER_FRAME, checkFrame);
			// show loader
			progressBar.scaleX = 0;
			preloadGraphic.addChild(progressBar);
			preloadGraphic.addChild(percentDisplay);
			preloadGraphic.y = stage.stageHeight / 2;
			percentDisplay.blendMode = BlendMode.INVERT;
			percentDisplay.x = stage.stageWidth / 2;
			percentDisplay.y = -4;
			percent = percentDisplay.getChildByName("percentDisplay") as TextField;
			addChild(preloadGraphic);
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
		}
 
		protected function progress(event:ProgressEvent):void
		{
			trace(event.bytesLoaded);
		}
 
		private function checkFrame(e:Event):void 
		{
			trace(e);
			if (currentFrame == totalFrames) 
			{
				removeEventListener(Event.ENTER_FRAME, checkFrame);
				startup();
			} else {
				var bytesLoaded:Number = this.loaderInfo.bytesLoaded;
				var bytesTotal:Number = this.loaderInfo.bytesTotal;
				percent.text = Math.ceil((100 * (bytesLoaded / bytesTotal))) + "%";
				progressBar.scaleX = (bytesLoaded / bytesTotal);
			}
		}
 
		private function startup():void 
		{
			removeChild(preloadGraphic);
			stop();
			var mainClass:Class = getDefinitionByName("Main") as Class;
			addChild(new mainClass() as DisplayObject);
		}
	}
}
В Main прописал [Frame(factoryClass="Preloader")]
Теперь при запуске прелоадер с 100% появляется на доли секунды и пропадает. Специально заэмбедил в проект png размером 27 Мб, но все равно грузится мгновенно. При этом первый трейс выдает 11447351, а второй вообще ничего (извиняюсь, не досмотрел - выводит [Event type="enterFrame" bubbles=false cancelable=false eventPhase=2]).

Подскажите, как все правильно вставить прелоадер, чтобы он нормально отображал загрузку моих ресурсов?
Правильно ли что все ресурсы нужно добавлять так как я сделал с png или можно создать отдельный файл, а в прелоадере просто импортнуть: import myRes.Resourses;?


Последний раз редактировалось Astraport; 21.11.2011 в 16:12.
Старый 21.11.2011, 18:07
tofflife вне форума Посмотреть профиль Отправить личное сообщение для tofflife Найти все сообщения от tofflife
  № 2  
Ответить с цитированием
tofflife

Регистрация: Jul 2009
Сообщений: 95
Вероятно, вы проверяете загрузку локально. Загрузка локально осуществляется одним пакетом.
Ещё возмонжо причины присутствия галочек в ресурсах типа "export in first frame".

если вы разрабатываете флешку под flash AS3.0 то в режиме отладки в менюшке можно найти пункт Download simulation.

p.s. не забывайте указывать версию ОС, версию отладчика и среду.

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
tofflife, спасибо, но причина была не в этом. На удаленном сервере тоже не работало.
Почему-то вывод по ENTER_FRAME не работал как в примере выше, в PROGRESS работает, но тоже как-то странно - progressBar.scaleX отлично и равномерно работает, а вот цифирки Math.ceil(100 * (bytesLoaded / bytesTotal)) в процессе загрузки выводят 0 или изредка 1 и потом в конце сразу 100%

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

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Я вижу, что слушается вход в кадр, но не вижу инстр. addFrame, срабатывает условие currentFrame === totalFrame ?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Почему-то вывод по ENTER_FRAME не работал как в примере выше, в PROGRESS работает
Ну так еще бы)) Когда вызовется ENTER_FRAME – загрузка уже закончилась и начинается отрисовка следующего кадра, то есть главного, в котором Мейн и все прибамбасы. На этом прелоадер и построен. Слушать надо прогресс. Если беда с цифрами, то надо разбираться с цифрами, я лично подозреваю, что Вы просто повесили на прогресс изменение скейла, а цифры так и остались на ентерфрейм по невнимательности. Извините, если что))
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Цитата:
Извините, если что))
Да нет Проверил на всякий случай.
Код AS3:
tbite = this.loaderInfo.bytesTotal;
protected function progress(event:ProgressEvent):void
		{
			percent.text = String (Math.ceil(100 * (event.bytesLoaded / tbite))) + "%";
			progressBar.scaleX = event.bytesLoaded / tbite;
		}

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

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

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


 


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


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