在右框架中准备好已加载的动画片段时获取事件

时间:2010-10-03 15:34:31

标签: flex flash actionscript movieclip swfloader

我正在开发一个使用swf加载元素并为加载的swf添加属性的应用程序。我使用SWFLoader加载电影,在COMPLETE事件上我将加载的MovieClip移动到特定的帧,然后列出其DisplayList。我发现,如果我很快遍历列表,它会被加载。也许代码更干净:

loader.addEventListener(Event.COMPLETE, function(evt:Event):void{
    var mc:MovieClip = MovieClip(loader.content);
    mc.gotoAndStop(frameNumber);
    for(i = 0; i < mc.numChildren; i++){
         trace(mc.getChildAt(i));
    }
}

我想念加载的swf中的一些孩子,在某些情况下我得到空值。现在我添加了一个Timer(),它在列出显示列表之前等待250ms并且工作正常但速度很慢且效率很低。

另一个奇怪的行为是,使用上一个片段,我无法获得一些MovieClip,即使Timer已就位。我必须在加载的swf中插入一个函数,如下所示:

function getItems():Array{
    var res:Array = [];
    for(var i:uint = 0; i < this.numChildren; i++){
        res.push(this.getChildAt(i));
    }
    return res;
}

检索正确的儿童名单。

非常感谢

1 个答案:

答案 0 :(得分:0)

您使用的是Loader类,如果是这样,您需要将事件侦听器添加到加载器的contentLoaderInfo属性,而不是加载器对象本身。这是一个非常常见的错误。

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(evt:Event):void{
    var mc:MovieClip = MovieClip(loader.content);
    mc.gotoAndStop(frameNumber);
    for(i = 0; i < mc.numChildren; i++){
         trace(mc.getChildAt(i));
    }
}

HTH