Форум 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, 17:46
tofflife вне форума Посмотреть профиль Отправить личное сообщение для tofflife Найти все сообщения от tofflife
  № 3  
Ответить с цитированием
tofflife

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Регистрация: Jul 2009
Сообщений: 95
Ну тогда скажи мне, мой друг, как это мне остановить цикл что бы потом продолжить? и что бы не вставлять костыли?!

Добавлено через 1 минуту
может есть все-таки какой-нибудь метод типа Stage.invalidate() (заставляет всю сцену перерисоваться) который заставляет диспетчеризатор просканировать все сообщения?

я бы его в цикле вызвал...

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

Регистрация: Jan 2009
Сообщений: 1,651
да убираешь нахрен свой цикл, вместо него делаешь переменную-флаг и проверку на enterFrame.

Нужно использовать принцип аналогичный такому:

Простой цикл, подвешивает флешку
Код:
public function some ():void {
  for (var i:Number = 0; i<9999999999; i++){
    //безумные вычисления тут
  }
}
Делаем цикл асинхронным, чтобы не подвешивал флешку:
Код:
private var i:Number;
public function some ():void {
  this.addEventListener (Event.ENTER_FRAME,efHr);
  i=0;
}

private function efHr (e:Event):void {
  var j:Number = 0;
  for (j=0; j<10000 && i<9999999999; i++,j++){//выполняем только 10000 действий в кадр из 9999999999, чтобы не подвесить флешку
  //безумные вичисления
  }
  if (i==9999999999) { //вычисления закончены
    this.removeEventListener (Event.ENTER_FRAME,efHr);
  }
}
__________________
мой пустой блог

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

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

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


 


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


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