我是一名 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
}
);
我希望以后能够引用幻灯片,以便根据需要切换它们 - 如何保持对新对象的引用?
更新:这似乎有两个问题。在调用 URLLoader 的完整事件之前进行了 forEach 调用,而且 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);
}
}
);