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

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

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

Регистрация: Jun 2010
Сообщений: 18
Question Последовательная обработка

Как на AS 2.0 сделать последовательную обработку событий? А именно:
1. у меня грузится некоторый xml-файл с данными
2. на основании того, что внутри этого файла, грузятся ещё объекты
Так вот столкнулся с тем, что данные из xml ещё не загрузились а скрипт уже перешёл к выполнению следующих команд. В итоге данных ещё нет, и вылезает ошибка. Разумеется, если грузить эти данные локально, то грузятся они быстро и всё проходит. Код простейший:

Код AS1/AS2:
var xData:XML = new XML();
xData.ignoreWhite = true;
xData.onLoad = function(success) {
	trace("Load ok!");
// тут идёт обработка данных из xml-файла
};
xData.load("xml/files.xml");
Пытался сделать ожидание загрузки, ставил после xData.load() цикл
Код AS1/AS2:
while (!xData.loaded) { }
но он просто завесил браузер, после чего плеер запросил останов скрипта. Как я понял, во Flash нет никакой паузы/задержки а только setInterval.
Как лучше поступить? Как вообще строить код, который должен дожидаться окончания загрузки, прежде чем исполняться дальше? Помогите пожалуйста!

Старый 22.06.2010, 22:05
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
1.
Код AS1/AS2:
var xData:XML = new XML();
xData.ignoreWhite = true;
xData.onLoad = function(success) {
	// тут идёт обработка данных из xml-файла
	nextActions();
};
xData.load("xml/files.xml");
 
function nextActions () 
{
	//только отсюда - дальнейшие действия
}
2.
Код AS1/AS2:
var xData:XML = new XML();
xData.ignoreWhite = true;
xData.onLoad = function(success) {
	// тут идёт обработка данных из xml-файла
	xmlDataReady = true ;
};
xData.load("xml/files.xml");
 
 
var chk:Number = setInterval(checkXmlData, 100);
 
function checkXmlData() 
{
	if (xmlDataReady)
	{
		clearInterval(chk);
		//только отсюда - дальнейшие действия
	}
}
PS. Пауза / задержка во флеше есть, это функция setTimeout, только вы ее не должны использовать, вам нужна не пауза, а отслеживание загрузки данных.


Последний раз редактировалось mooncar; 22.06.2010 в 22:10.
Старый 22.06.2010, 22:31
Бармалейкин вне форума Посмотреть профиль Отправить личное сообщение для Бармалейкин Найти все сообщения от Бармалейкин
  № 3  
Ответить с цитированием
Бармалейкин

Регистрация: Jun 2010
Сообщений: 18
т.е. получается нужно каждый блок кода заключать в функцию, и её вызывать из .onLoad предыдущего блока кода? Эдакая цепочка... Но в целом суть понял, спасибо!
А setTimeout это таймер, он не остановит выполнения кода, просто вызовет (паралельно?) по истечении заданного времени заданную функцию. Не подходит.

Ещё тогда такой вопросик - а .load для нескольких разных объектов выполняется паралельно или есть наподобие очереди, например не более 4 одновременно загружаемых объектов?

Старый 22.06.2010, 23:14
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Насчет XML не знаю. Но например, когда грузим MovieClipLoder.load, замечал, всё происходит безо всякой очереди, причем последнее, вызванное к загрузке, обычно загружается первым.
Так что и здесь скорее всего так.
Цитата:
Эдакая цепочка.
Конечно. AS работает асинхронно, поэтому только так.
Используются слушатели, обработчики событий и от это "танцуются" все остальные действия.

Старый 22.06.2010, 23:42
Бармалейкин вне форума Посмотреть профиль Отправить личное сообщение для Бармалейкин Найти все сообщения от Бармалейкин
  № 5  
Ответить с цитированием
Бармалейкин

Регистрация: Jun 2010
Сообщений: 18
Всё понял, спасибо ещё раз!
Вопрос закрыт.

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

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

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


 


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


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