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

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

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

Регистрация: Nov 2009
Сообщений: 23
По умолчанию Advanced Preloader

Привет всем сожителям форума.

[Предыстория]
Есть простой и удобный способ вставить прелоадер в свое приложение - http://www.bit-101.com/blog/?p=946.
Для тех, кому лень читать, поясняю, что суть этого метода в использовании недокументированного мета-тега [Frame(factoryClass="Preloader")], который разбивает твое приложение на 2 кадра, и помещает прелоадер (Preloader) в первый кадр, а основное приложение во второй.

Метод отличный, но декомпилятор показывает, что дополнительно он подключяает 36КБ различных флексовых классов.
[/Предыстроия]

Есть ли возможность воссоздать такую же схему на чистом АС3.
Мои поиски в сторону mxmlc -frames.frame Preloader привели только к созданию 2-кадровой флешки, котороая не вызвает класс Preloader

P.S. Немного поискав я обнаружил вот такой вот прелоадер написанный на Нахе http://www.mindless-labs.com/blog/ar...xe_preloader_u. Он весит 19 КБ и по прежднему включает в себя mx.core.* классы.


Последний раз редактировалось boleg; 05.11.2010 в 20:09.
Старый 05.11.2010, 20:41
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 2  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Я с трудом представляю себе приложение, для которого одновременно справедливы две позиции:

1. 36Kb лишнего веса — кошмар!
2. необходим прелоадер.
__________________
Поймай яблоко 2!

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

блогер
Регистрация: Jan 2010
Адрес: Киев
Сообщений: 156
Записей в блоге: 4
Отправить сообщение для ps_spectre с помощью Skype™
boleg, вот пример как можно сделать с помощью -frame

Preloader.as (стандартный, который генерит ФД)
Код AS3:
package 
{
	import flash.display.*;	
	import flash.events.*;	
	import flash.text.TextField;
	import flash.utils.getDefinitionByName;
 
	[SWF(width=800,height=600,frameRate=30,backgroundColor=0xC254DE)]
	public class Preloader extends MovieClip 
	{
		private var _txt:TextField = new TextField();
		public function Preloader() 
		{
			if (stage) {
				stage.scaleMode = StageScaleMode.NO_SCALE;
				stage.align = StageAlign.TOP_LEFT;
				addChild(_txt);				
			}
			addEventListener(Event.ENTER_FRAME, checkFrame);
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
			loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
		}
 
		private function ioError(e:IOErrorEvent):void 
		{
			trace(e.text);
		}
 
		private function progress(e:ProgressEvent):void 
		{			
			// TODO update loader			
			_txt.text = loaderInfo.bytesLoaded.toString();
		}
 
		private function checkFrame(e:Event):void 
		{
			if (loaderInfo.bytesLoaded == loaderInfo.bytesTotal && currentFrame == totalFrames) 
			{				
				stop();
				loadingFinished();
			}
		}
 
		private function loadingFinished():void 
		{
			removeEventListener(Event.ENTER_FRAME, checkFrame);
			loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
			loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError);			
			// TODO hide loader			
			startup();
		}
 
		private function startup():void 
		{
			var mainClass:Class = getDefinitionByName("HelloWorldClass") as Class;
			stage.addChild(new mainClass() as DisplayObject);		
		}		
	}	
}
HelloWorldClass.as
Код AS3:
package 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class HelloWorldClass extends Sprite 
	{
//для теста пихаем картинку, чтобы раздуть второй кадр (куда этот класс добавляется)
		[Embed(source = 'someshit.jpg')]
		private var ShitImage:Class;
 
		public function HelloWorldClass():void 
		{
			init();
		}
 
		private function init(e:Event = null):void 
		{	
			addChild(new ShitImage() as DisplayObject);			
			var s:Sprite = new Sprite();
			s.graphics.beginFill(0x098505);
			s.graphics.drawCircle(100, 100, 100);
			s.graphics.endFill();
			addChild(s);
		}
	}
}
компайл:
Код:
mxmlc Preloader.as -frame 1 HelloWorldClass 
или с доп.опциями 
mxmlc Preloader.as -frame 1 HelloWorldClass -debug -benchmark -keep -dump-config config.xml
и в результате ничего лишнего вообще не добавляется.
первый кадр около 2х килобайт. )

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

Регистрация: Nov 2009
Сообщений: 23
ps_spectre, спасибо работает. Респект как тру-флешеру.

Для тех кто попытается повторить то, о чем говорил ps_spectrе:
1. Необходимо сделать основным классом приложения сам прелоадер. (Preloader.as, клик правой кнопкой мыши, "Always Compile")
2. Аналогичную галочку убрать у класса HelloWorld.as
3. Добавить дополнительные аргументы компиляции.

Цитата:
Я с трудом представляю себе приложение, для которого одновременно справедливы две позиции:

1. 36Kb лишнего веса — кошмар!
2. необходим прелоадер.
Ты прав, 36 КБ совсем не критичны. Я просто искал самый лучший способ.


Последний раз редактировалось boleg; 06.11.2010 в 00:37.
Создать новую тему Ответ Часовой пояс GMT +4, время: 02:05.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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