AS2:如何在通过MovieClipLoader加载的SWF / MovieClip上使用addEventListener

时间:2009-08-06 16:39:22

标签: flash actionscript actionscript-2 addeventlistener moviecliploader

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

这是代码

Parent.swf

_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

import mx.events.EventDispatcher;

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

EventDispatcher.initialize(this);

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

现在我希望这会起作用,并且Parent会在跟踪中“childLoaded捕获2”,但事实并非如此。

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

1 个答案:

答案 0 :(得分:2)

我注意到的第一件事是,在父母中,您列出的是名为initAsLoaded的事件,但在孩子中,您正在调度名为childLoaded的事件。倾听永远不会发送的事件可能不是一个好主意。

但是,这不是实际问题,因为修复事件并不能解决问题。主要问题是,{/ 1}}中的onLoadInit事件在执行了第一帧child.swf的代码后被调度。这意味着在child.swf中,您在第一帧上调度了一个没有人正在收听的事件,因为尚未调用MovieClipLoader

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

家长第一帧:

onLoadInit

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

儿童第一帧:

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

儿童第二帧:

import mx.events.EventDispatcher;

EventDispatcher.initialize( this );

希望这会有所帮助......