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

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

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

Регистрация: Jul 2009
Сообщений: 95
По умолчанию Загрузка внешних ресурсов

Имеется не рабочий код
Код AS3:
                private static function getResource(resName:String):Object
		{
			var fileName:String = GameConfig.getCfgAttribute(resName, "file");
			var request:URLRequest = new URLRequest("./static data/" + fileName); 
			var loader:Loader = new Loader();
			loader.load(request); 
			return loader.content;
		}
Данный код не работает, поскольку здесь нет обработчика onComplete. Проблема состоит в том, что ресурсы в данном участке кода должны загружаться "на лету".
Отсюда у меня два вопроса:
1. Можно ли в данном методе не выходя из него повесить обработчик и как-то в цикле ожидать его вызова?(в цикле в таком случае, нужно вызывать скорее всего какой-то метод для системы событийю. поскольку в противном случае флешка тупо зависнет)

2. Можно ли как-то это дело загрузить без обработчиков?

Добавлено через 8 минут
ау!!!

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Я бы делал подгрузку zip архивов/swf с ресурсами - из них можно будет сразу получить ресурс.
Ну или getResource может возвращать какую-то обёртку над ресурсом, которая подгружает сам ресурс и сообщает об окончании загрузки.

Мне тоже интересно как делают в реальных проектах (:
__________________
while(1) {}


Последний раз редактировалось Division; 25.03.2010 в 17:49.
Старый 25.03.2010, 19:45
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 3  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Цитата:
Сообщение от Division Посмотреть сообщение
Ну или getResource может возвращать какую-то обёртку над ресурсом, которая подгружает сам ресурс.
Это самое правильное решение. Если это визуальный ресурс - твой объект просто добавляет его в себя по окончании загрузки (Или, например если это картинка, просто подменяет себе bitmapData, чтобы не создавать лишней обёртки)

tofflife, забудь о синхронности. Тем более когда работаешь с файлами.

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Division Посмотреть сообщение
Мне тоже интересно как делают в реальных проектах (:
Могу предположить )

Менеджер ресурсов. Организует потоки загрузки, использует приоритеты загрузки, отдает обертки ресурсов, в т.ч. локаль-зависимые, управляет временем жизни ресурса, содержит карту [id ресурса] => [URI ресуса]. Загрузку запрошенного ресурса делегирует той или иной службе. Для доставки ресурса служба использует любой транспорт передачи данных, поддерживаемый ActionScript: file, socket, http, local connection, external interface, shared object.

Как приложение взаимодействует с Менеджером ресурсов?

Менеджер ресурсов - единственный экземпляр. Как будете обращаться к нему обращаться - дело вкуса.

Приложение запрашивает ресурс по идентификатору, получает обертку. Если обертка содержит ресурс, то приложение извлекает ресурс. Если ресурса еще нет - подписывается на Event.COMPLETE.

С этих пор классы работы с потоками контента: Loader, URLStream, URLLoader и пр. перечисленные выше находятся вне закона и используются исключительно классами служб. Конечно, нужно четко разделять контент и данные. Наш ResourceManager только для контента.
В этом ракурсе библиотека классов - контент. А массив значений счета в игре в SO остается данными.

Плюсы использования менеджера
1) Сокращение кода. Код написан один раз во фреймворке. Больше нет портянок. Остается компактный

Код AS3:
var rw:ResourceWrapper = resourceManager.getResource(resourceId, locale):ResourceWrapper;
if ( !rw.ready ) {
	rw.addEventListener(ResourceEvent.READY, handler_ready);
} else {
	var font:Font = Font( rw.getResource(resourceId) );
	Font.registerFont(font);
}
2) Единая точка доступа к контенту. Отладка упрощается в разы.
3) Локаль. Она самая. Все ресурсы привязаны к локали.
4) Управление очередью и приоритетами загрузки. Теперь библиотеки классов приложения загружаются раньше GUI,
а еще невидимые персонажи позже присутствующих во вьюпорте.
5) Управляемая выгрузка неиспользуемых ресурсов.
6) Единый учет трафика в случае сетевых соединений. Не так гладко с этим, если ресурс кеширован браузером.
7) Может чего-то упустил.

Минусы
1) Запарка с картой ресурсов. Необходимо ее как-то и кем-то генерировать. Как вариант - автоматизированно серверной частью. Как раз будет синхронизировано с описанием моделей, отдаваемыми сервером и которым понадобятся эти ресурсы. На худой конец внешний статичный файл.
2) Придется придерживаться конвы загрузки через ResourceManager.
3) Может чего-то упустил.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 25.03.2010 в 20:07.
Старый 25.03.2010, 17:46
tofflife вне форума Посмотреть профиль Отправить личное сообщение для tofflife Найти все сообщения от tofflife
  № 5  
Ответить с цитированием
tofflife

Регистрация: Jul 2009
Сообщений: 95
вот и я смотрю, что придется делать контейнер для loader`a... Что-то типа контрола DynamicImage

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

Регистрация: Jan 2009
Сообщений: 1,651
что тут непонятного? Сначала вешаем на экран картинку а-ля "грузимся". Потом создаем загрузчики, вешаем на них события. Для каждого загрузчика увеличиваем счетчик на 1. На каждый complete уменьшаем счётчик на один. Когда счётчик обнуляется убираем мувик "грузимся" - загрузка окончена.

Без обработчиков загрузить можно =) Только вы не узнаете о том что данные загрузились =)
__________________
мой пустой блог

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от tofflife Посмотреть сообщение
1. Можно ли в данном методе не выходя из него повесить обработчик и как-то в цикле ожидать его вызова?[/size]
ау!!!
Лучше загружайте сначала массив с названиями файлов которые загружаете , и создайте метод класса complete который будет принимать событие Event.COMPLETE и вызывать ваш метод getResource(arrayRes[iter++]);

Старый 25.03.2010, 17:56
tofflife вне форума Посмотреть профиль Отправить личное сообщение для tofflife Найти все сообщения от tofflife
  № 8  
Ответить с цитированием
tofflife

Регистрация: Jul 2009
Сообщений: 95
to iflamberg

Проблема состоит в том, что ресурсы в данном участке кода должны загружаться "на лету".

Добавлено через 1 минуту
это уже нереально. у меня архитектура сделана не так. У меня происходит парсирование XML, внутри которого подгружается динамически виртуальная фабрика, в которую в цикле передаются атрибуты из тего для создания определённого контрола. Это все не может просто вот так взять и остановиться(

Не ужели разработчики adobe не придумали синхронный вариант загрузки?

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Цитата:
Не ужели разработчики adobe не придумали синхронный вариант загрузки?
Кажется они не придумали ничего синхронного (:
Если разделить ресурсы на небольшие группы, можно при необходимости подгружать их сразу пачками в менеджер ресурсов, а сам менеджер будет их отдавать уже синхронно.
Хотя вариант с обёрткой мне даже больше нравится.
__________________
while(1) {}

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

Регистрация: Jan 2009
Сообщений: 1,651
у тебя просто проблема с архитектурой.
Остановить все задачи, пока выполняется параллельный процесс не должно составлять проблем.
__________________
мой пустой блог

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

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

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


 


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


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