1

我正在开发一个使用 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(),它在列出显示列表之前等待 250 毫秒并且可以工作,但它非常缓慢且效率低下。

另一个奇怪的行为是,使用前面的片段我无法获得一些 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;
}

检索正确的孩子列表。

非常感谢

4

1 回答 1

0

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

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));
    }
}

高温高压

于 2010-10-03T15:38:43.427 回答