Я разработчик C #, который пытается изучить AS3, так что это будет довольно новый вопрос.
Я запутался в отношении объема и GC, так как у меня есть собственный класс, расширяющий MovieClip (Slide), в котором я создаю экземпляры внутри цикла и push () в массив, но после этого элементы становятся пустыми Я вытащил их из коллекции.
var ldr:URLLoader = new URLLoader();
ldr.load(new URLRequest("presentation.xml"));
ldr.addEventListener(
Event.COMPLETE,
function(e:Event):void {
config = new XML(e.target.data);
for (var i:Number = 0; i < config.slides.slide.length(); i++)
{
var node = config.slides.slide[i];
var slide:Slide = new Slide();
slides.push(slide);
addChild(slide); // Works fine
}
}
);
slides.forEach(function(e:*, index:int, array:Array):void
{
addChild(e); // Causes "Parameter child must be non-null" exception
}
);
Я хотел бы иметь возможность ссылаться на слайды позже, чтобы переключать их по мере необходимости - как я могу сохранить ссылку на мои новые объекты?
Обновление: Похоже, с этим было две проблемы. Вызов forEach был сделан до того, как было вызвано полное событие URLLoader, а также forEach, похоже, не работает должным образом. Вот окончательный рабочий код:
var ldr:URLLoader = new URLLoader();
ldr.load(new URLRequest("presentation.xml"));
ldr.addEventListener(
Event.COMPLETE,
function(e:Event):void {
config = new XML(e.target.data);
for (var i:Number = 0; i < config.slides.slide.length(); i++)
{
var node = config.slides.slide[i];
var slide:Slide = new Slide();
slides.push(slide);
}
for each (var sl in slides)
{
addChild(sl);
}
}
);