当加载的影片剪辑在右帧中准备就绪时获取事件

发布于 2024-09-25 21:36:40 字数 806 浏览 9 评论 0原文

我正在开发一个使用 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 毫秒并且可以工作,但它非常慢且效率低下。

另一个奇怪的行为是,使用前面的代码片段,即使计时器就位,我也无法获得一些影片剪辑。我必须在加载的 swf 中插入一个函数,如下所示:

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

检索正确的子项列表。

多谢

i'm developing an app that use swf to load elements and add properties to the loaded swf. I use SWFLoader to load the movie and on the COMPLETE event i move the loaded MovieClip to a specific frame and then list its DisplayList. I've discovered that if i traverse the list soon it's note loaded. Maybe it's cleaner with code:

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

I miss some children from the loaded swf and in some cases i get null values. Now i've added a Timer() that wait 250ms before listing the display list and works but it's very slow and inefficient.

The other strange behaviour is that with the previous snippet i can't get some MovieClip, even with the Timer in place. I had to insert a function in the loaded swf like this:

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

To retrieve the correct list of children.

Thanks a lot

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月下伊人醉 2024-10-02 21:36:40

您是否使用 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));
    }
}

华泰

Are you using the Loader class, if so, you need to add the event listener to the loader's contentLoaderInfo property, not the loader object itself. It is a very common mistake.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文