首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS2:如何在通过MovieClipLoader加载的SWF/影片剪辑上使用addEventListener

AS2:如何在通过MovieClipLoader加载的SWF/影片剪辑上使用addEventListener
EN

Stack Overflow用户
提问于 2009-08-06 16:39:22
回答 1查看 10.8K关注 0票数 1

我正在尝试加载一个本地SWF,然后捕获一些被触发的事件,但我不明白为什么这不起作用。

下面是代码

Parent.swf

代码语言:javascript
复制
_mcl = new MovieClipLoader();
_mcl.addListener(this);
_mcl.loadClip("Child.swf", rotator_mc);

function onLoadComplete(clip) {
    clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 1")});
}

function onLoadInit(clip) {
    clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 2")});
}

Child.swf

代码语言:javascript
复制
import mx.events.EventDispatcher;

function dispatchEvent() {};
function addEventListener() {};
function removeEventListener() {};

EventDispatcher.initialize(this);

trace("Child dispatching: childLoaded");
dispatchEvent({type:"childLoaded", target: this});

现在,我希望这会起作用,并且父级在跟踪中会有"childLoaded caught 2“,但它没有。

有没有办法实现我想要做的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-07 05:05:04

我注意到的第一件事是,在父进程中,您列出了一个名为initAsLoaded的事件,而在子进程中,您调度了一个名为childLoaded的事件。侦听永远不会被调度的事件可能不是一个好主意。

然而,这并不是真正的问题,因为修复事件并不能解决问题。主要的问题是来自MovieClipLoaderonLoadInit事件是在child.swf的第一帧代码被执行之后被调度的。这意味着在child.swf中,由于onLoadInit还没有被调用,所以您在第一个帧上调度了一个没有人监听的事件。

要解决此问题,您只能从第二个帧开始调度child.swf中的事件。

父第一帧:

代码语言:javascript
复制
var rotator_mc = _root.createEmptyMovieClip("rotator_mc", _root.getNextHighestDepth() );

_mcl = new MovieClipLoader();
_mcl.addListener(this);
_mcl.loadClip("child.swf", rotator_mc);

function onLoadComplete(clip) {
    trace("onLoadComplete " + clip + ", " + clip.addEventListener );
    clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 1")});
}

function onLoadInit(clip) {
    trace("onLoadInit " + clip + ", " + clip.addEventListener );
    clip.addEventListener("initAsLoaded", function() {trace("childLoaded loaded 2")});
}

这是你父母第一帧的我的版本。我必须创建一个空的影片剪辑作为容器,并且我向事件处理程序添加了一些跟踪。

子第一帧:

代码语言:javascript
复制
import mx.events.EventDispatcher;

EventDispatcher.initialize( this );

子帧第二帧:

代码语言:javascript
复制
stop();

this.dispatchEvent({type:"initAsLoaded", target: this});

trace("Child dispatching: childLoaded");

希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1240103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档