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

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

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

Регистрация: Aug 2006
Сообщений: 32
По умолчанию загрузка двух xml файлов

здравствуйте!
у меня есть класс, в нем осуществляется загрузка двух xml файлов, после загрузки должно сгенерироваться событие. Вопрос в том как это лучше сделать? я это сделал следующим образом:
Код AS3:
public class XMLLoader extends Sprite {
		public var xmlMap:XML;
		public var xmlObjects:XML;
		private var ready:Boolean=false;
 
		//---------------------------------------------------------
		public function XMLLoader() {
			var loaderMap:URLLoader=new URLLoader();
			loaderMap.dataFormat=URLLoaderDataFormat.TEXT;
			loaderMap.addEventListener(Event.COMPLETE,loadCompleteMap);
			loaderMap.load(new URLRequest("map.xml"));
			var loaderObjects:URLLoader=new URLLoader();
			loaderObjects.dataFormat=URLLoaderDataFormat.TEXT;
			loaderObjects.addEventListener(Event.COMPLETE,loadCompleteObjects);
			loaderObjects.load(new URLRequest("staticObjects.xml"));
		}
		//---------------------------------------------------------
		private function loadCompleteMap(event:Event):void {
			xmlMap=new XML(event.target.data);
			if (ready==true) {
				dispatchEvent(new Event("xmlLoaded",true));
			} else {
				ready=true;
			}
		}
		//---------------------------------------------------------
		private function loadCompleteObjects(event:Event):void {
			xmlObjects=new XML(event.target.data);
			if (ready==true) {
				dispatchEvent(new Event("xmlLoaded",true));
			} else {
				ready=true;
			}
		}
	}
есть ли более гибкий подход? своего решения опасаюсь в следующем: а что если второй файл загрузится в тот момент когда первый уже сгенерировал событие, но еще не успел изменить значение переменной ready. Тогда получится что пользовательское событие никогда не сгенерируется. Иными словами это обычный параллелизм и доступ к общему ресурсу, отсюда и все вытекающие проблемы.

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

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
ну и, сделайте какой нить примитивный счетчик, который бы увеличивался на единицу каждый раз по свершению события
__________________
Коллекционирую чужие ActionScript Блоги

Старый 13.04.2010, 15:50
Karandash8 вне форума Посмотреть профиль Отправить личное сообщение для Karandash8 Найти все сообщения от Karandash8
  № 3  
Ответить с цитированием
Karandash8

Регистрация: Aug 2006
Сообщений: 32
по сути переменная ready эту роль и выполняет, но при этом остается описанная мною проблема с параллелизмом.

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

Регистрация: Mar 2008
Адрес: Moscow
Сообщений: 311
Отправить сообщение для BeDLiNt с помощью ICQ Отправить сообщение для BeDLiNt с помощью Skype™
Цитата:
если второй файл загрузится в тот момент когда первый уже сгенерировал событие, но еще не успел изменить значение переменной ready.
Тогда свойство ready поменяет второй файл. А первый увидит, что оно уже true.
__________________
2+2=5

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

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
ну а что добавьте ваши лодеры в массив например, когда происходить complete тупо увеличиваем на единицу и проверяем если количество равно двум то выполнить какие либо дальнейшие действия
__________________
Коллекционирую чужие ActionScript Блоги

Старый 13.04.2010, 16:03
Karandash8 вне форума Посмотреть профиль Отправить личное сообщение для Karandash8 Найти все сообщения от Karandash8
  № 6  
Ответить с цитированием
Karandash8

Регистрация: Aug 2006
Сообщений: 32
да действительно, сделал вариант со счетчиком:
Код AS3:
public class XMLLoader extends Sprite {
		public var xmlMap:XML;
		public var xmlObjects:XML;
		private var ready:int=0;
 
		//---------------------------------------------------------
		public function XMLLoader() {
			var loaderMap:URLLoader=new URLLoader();
			loaderMap.dataFormat=URLLoaderDataFormat.TEXT;
			loaderMap.addEventListener(Event.COMPLETE,loadCompleteMap);
			loaderMap.load(new URLRequest("map.xml"));
			var loaderObjects:URLLoader=new URLLoader();
			loaderObjects.dataFormat=URLLoaderDataFormat.TEXT;
			loaderObjects.addEventListener(Event.COMPLETE,loadCompleteObjects);
			loaderObjects.load(new URLRequest("staticObjects.xml"));
		}
		//---------------------------------------------------------
		private function loadCompleteMap(event:Event):void {
			xmlMap=new XML(event.target.data);
			ready++;
			loadComplete();
		}
		//---------------------------------------------------------
		private function loadCompleteObjects(event:Event):void {
			xmlObjects=new XML(event.target.data);
			ready++;
			loadComplete();
		}
		//---------------------------------------------------------
		private function loadComplete() {
			if (ready==2) {
				dispatchEvent(new Event("xmlLoaded",true));
			}
		}
	}


Последний раз редактировалось Karandash8; 13.04.2010 в 16:05.
Старый 13.04.2010, 16:06
BeDLiNt вне форума Посмотреть профиль Отправить личное сообщение для BeDLiNt Найти все сообщения от BeDLiNt
  № 7  
Ответить с цитированием
BeDLiNt
 
Аватар для BeDLiNt

Регистрация: Mar 2008
Адрес: Moscow
Сообщений: 311
Отправить сообщение для BeDLiNt с помощью ICQ Отправить сообщение для BeDLiNt с помощью Skype™
Цитата:
да действительно, сделал вариант со счетчиком
На самом деле вы сделали с точностью тоже самое, что и в первый раз. Но, так как у вас всего два объекта, то хватало булевой переменной.
__________________
2+2=5

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

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
вобщем то да, хватало бы и булевой
__________________
Коллекционирую чужие ActionScript Блоги

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

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

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


 


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


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