![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2010
Сообщений: 18
|
Как на AS 2.0 сделать последовательную обработку событий? А именно:
1. у меня грузится некоторый xml-файл с данными 2. на основании того, что внутри этого файла, грузятся ещё объекты Так вот столкнулся с тем, что данные из xml ещё не загрузились а скрипт уже перешёл к выполнению следующих команд. В итоге данных ещё нет, и вылезает ошибка. Разумеется, если грузить эти данные локально, то грузятся они быстро и всё проходит. Код простейший: var xData:XML = new XML(); xData.ignoreWhite = true; xData.onLoad = function(success) { trace("Load ok!"); // тут идёт обработка данных из xml-файла }; xData.load("xml/files.xml"); но он просто завесил браузер, после чего плеер запросил останов скрипта. Как я понял, во Flash нет никакой паузы/задержки а только setInterval. ![]() Как лучше поступить? Как вообще строить код, который должен дожидаться окончания загрузки, прежде чем исполняться дальше? Помогите пожалуйста! |
|
|||||
|
Модрон-ветеринар
|
1.
var xData:XML = new XML(); xData.ignoreWhite = true; xData.onLoad = function(success) { // тут идёт обработка данных из xml-файла nextActions(); }; xData.load("xml/files.xml"); function nextActions () { //только отсюда - дальнейшие действия } 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); //только отсюда - дальнейшие действия } } Последний раз редактировалось mooncar; 22.06.2010 в 22:10. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 18
|
т.е. получается нужно каждый блок кода заключать в функцию, и её вызывать из .onLoad предыдущего блока кода? Эдакая цепочка... Но в целом суть понял, спасибо!
А setTimeout это таймер, он не остановит выполнения кода, просто вызовет (паралельно?) по истечении заданного времени заданную функцию. Не подходит. Ещё тогда такой вопросик - а .load для нескольких разных объектов выполняется паралельно или есть наподобие очереди, например не более 4 одновременно загружаемых объектов? |
|
|||||
|
Модрон-ветеринар
|
Насчет XML не знаю. Но например, когда грузим MovieClipLoder.load, замечал, всё происходит безо всякой очереди, причем последнее, вызванное к загрузке, обычно загружается первым.
Так что и здесь скорее всего так. Цитата:
Используются слушатели, обработчики событий и от это "танцуются" все остальные действия. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 18
|
Всё понял, спасибо ещё раз!
![]() Вопрос закрыт. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|