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

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

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

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
По умолчанию Управление ходом иницализации Application

добрый день
в общем, проблема такая:
есть flex-приложение, ресурсы хранятся отдельно. в зависимости от локали с помощью resourceManager.loadResourceModule грузится тот или иной ресурс. дак вот проблема в том, что Application успевает проинициализироваться до того как догрузятся ресурсы, следовательно все надписи и рисунки не отображаются пока не догрузится файл ресурсов.
дак вот, можно ли как-то управлять ходом инициализации приложения, чтобы прелоадер отображался вплоть до завершения загрузки ресурсов? если нельзя, то может есть какие-то другие предложения?
__________________
я могу стать всем, если только захочу

Старый 13.12.2010, 19:56
Lexxx_HU вне форума Посмотреть профиль Отправить личное сообщение для Lexxx_HU Найти все сообщения от Lexxx_HU
  № 2  
Ответить с цитированием
Lexxx_HU

Регистрация: Oct 2010
Сообщений: 67
я сделал следующим образом, у меня при инициализации запускается и загружается множество всего, и функции, и картинки и xml
Код AS3:
public var array_functions:ArrayCollection = new ArrayCollection();
array_functions.addItem({call_function:setUserMy, call_info:'Загрузка личной информации'});
и так далее..

Код AS3:
_progBar.setProgress(call_i+1, array_functions.length);
	_progBar.label = array_functions[call_i].call_info;
	call_i++;
	var timerFunctions:Timer = new Timer(1000, array_functions.length);
	timerFunctions.addEventListener(TimerEvent.TIMER, call_func);
 
 
	timerFunctions.start();
через каждую секунду запускается функция и прогресс бар меняет значение и надпись в нем


а если вам нужно имеено ожидание от загрузки фото например то вот таким способом можно
Код AS3:
// функция загрузки фото      
public function loadPhoto(Img:Image, path:String):void {
	var context:LoaderContext = new LoaderContext();
	context.checkPolicyFile = true; // Заставляем проверить политику
	var avaloader:Loader = new Loader();// новый загрузчик авы
	var avarequest:URLRequest = new URLRequest(); //новый Url запрос для получения аватарки
	avarequest.url = path; //присваеваем URL адресу ссылку на аватар пользователя
	avaloader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
		function ():void {
			Img.source = avaloader;
		}
	); //добавляем слушителя когда загрузиться аватарка
	avaloader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, 
		function ():void {
			//loadPhoto(Img, path);
			Img.source = noavatarClass;
		}
	);
	avaloader.load(avarequest, context); //начинаем грузить аватарку
}

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Сделать два состояния. В первом показать прелоадер для ресурсов. Во втором само приложение. После загрузки модуля переключиться на второе состояние.

Старый 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.
Старый 14.12.2010, 13:25
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 5  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
В принципе есть еще варианты:
1. Загрузить модуль в прелоадере, что бы он попал в кэш. Это ускорит повторную загрузку.
2. Загрузить модуль в прелоадере, и скормить в resourceManager уже загруженный.

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

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Загрузить модуль в прелоадере, что бы он попал в кэш. Это ускорит повторную загрузку.
я тестирую локально (без загрузки по сети), все-равно видно мелькание при загрузке ресурсов, так что не вариант
Цитата:
Загрузить модуль в прелоадере, и скормить в resourceManager уже загруженный.
вот это уже хорошая идея. для этого мне нужно будет подсовывать свой прелоадер?
__________________
я могу стать всем, если только захочу

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Да. впрочем его в любом случае пришлось бы делать свой.

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

Теги
application , flex , preloader , resourceManager
Опции темы
Опции просмотра

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

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


 


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


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