Я изучаю как3, и у меня возникают трудности с пониманием событий.Немного помогите разобраться в событиях (вопрос о нобе)
Я пытаюсь загрузить параметры внутри массива, которые мне позже понадобятся для загрузки изображений.
Теперь ..
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
myLoader.load(new URLRequest("slides.xml"));
myLoader.addEventListener(Event.COMPLETE, processXMLSlides);
...
}
private function processXMLSlides(e:Event):void {
removeEventListener(Event.COMPLETE, processXMLSlides);
myXML = new XML(e.target.data);
myXML.ignoreWhite=true;
for (var i:int = 0; i < myXML.IMAGE.length(); i++) {
imagesURLs.push(myXML.IMAGE[i]);
//trace(myXML.IMAGE[i]);
}
//Start the main routine.
loadImages();
writeImage(imageCurrent);
}
loadImages() принимает imagesURLs массива и загружает их в другой массив как URLRequests, а затем writeImage() записывает изображение на сцену.
Теперь дело в этом. Функция Если я перенесу loadImages() и writeImage() здесь:
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
myLoader.load(new URLRequest("slides.xml"));
myLoader.addEventListener(Event.COMPLETE, processXMLSlides);
//Start the main routine.
loadImages();
writeImage(imageCurrent);
...
}
Это не работает, потому что loadImages вызывается ДО массив получает заполняется из XML. Теперь, как я могу сказать as3 ожидать завершения процессаXMLSlides? Нужно ли мне другое событие? Это глупо (есть лучшие способы делать то, что я делаю)?
Благодаря
только примечание: слушатели событий должны быть удалены из своих диспетчеров. например, myLoader.removeEventListener (Event.COMPLETE, processXMLSlides) ;, evt.target.removeEventListener ... или evt.currentTarget.removeEventListener ... – TheDarkIn1978
@ TheDarkIn1978 Почему вы так говорите? Вам нужно удалить eventListeners только в том случае, если есть причина, а не каждый раз. –
Извините, я не был ясен. я сказал, что приведенный выше код неверен, поскольку myLoader добавляет прослушиватель событий и отправляет событие, но родительский объект myLoader пытается удалить прослушиватель событий, который он не имеет. Кроме того, прослушиватели событий должны быть удалены, если они не используются, иначе вы столкнетесь с проблемой сбора мусора. – TheDarkIn1978