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

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

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

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Сообщение от alatar Посмотреть сообщение
Сделать два состояния. В первом показать прелоадер для ресурсов. Во втором само приложение. После загрузки модуля переключиться на второе состояние.
ну эта идея первая посетила мою голову, но придется делать отдельный прелоадер. к тому же у Application есть фаза инициализации, дак почему бы не запихать туда.
в общем, пара часов ковыряния исходников flex привели к следующим результатам: инициализация компонента происходит в методе initialize (в классе UIComponent). по-сути, можно попробовать его переопределить, но создавая приложение в mxml разметке, этот метод уже переопределяется, так-что нам его уже не переопределить (точнее можно, но нужно наследоваться в обычном as файле).
также замечаем, что есть свойство initialized, которое становится true, когда компонент уже проинициализирован. так может нам вручную проставить его в false. но так тоже делать нельзя, так как управлением этого свойства занимается LayoutManage. идем в его исходники и замечаем, что устаановка этого свойства происходит на основании значения свойства processedDescriptors. причем попутно замечаем, что это свойство как раз меняется после выполнения инициализации посредством вызова метода initializationComplete. вот оно! его то мы и переопределим. в итоге получаем следующее:
Код AS3:
...
public var resourcesInitialized:Boolean;
private function preinitializeHandler():void
{
	resourcesInitialized = false;
	//грузим ресурс
	var eventDispatcher:IEventDispatcher = resourceManager.loadResourceModule("resources.swf");
           eventDispatcher.addEventListener(ResourceEvent.COMPLETE, completeHandler);
}
override protected function initializationComplete():void
{
	if (!resourcesInitialized)
	{
		processedDescriptors = false;
	}
	else
	{
		processedDescriptors = true;
	}
}
private function completeHandler(event:ResourceEvent) : void
{
	resourceManager.localeChain = ["ru_RU"];
	resourcesInitialized = true;
	initializationComplete();
}
ну вот работает, пока ресурсы не догрузятся, отображается прогресс бар (правда он не отображает непосредственно процесс загрузка, а просто замирает). после инициализации приложение запускается уже со всеми ресурсами.

UPD: кстати данное управление инициализацией возможно и в других компонентах (что кстати и сделано в некоторых стандартных)
__________________
я могу стать всем, если только захочу


Последний раз редактировалось Felicast; 14.12.2010 в 12:15.
Создать новую тему   Часовой пояс GMT +4, время: 07:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
application , flex , preloader , resourceManager

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

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


 


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


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