1

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

这是代码

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

儿童.swf

import mx.events.EventDispatcher;

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

EventDispatcher.initialize(this);

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

现在我希望这会起作用,并且父级会在跟踪中显示“childLoaded catch 2”,但事实并非如此。

有什么办法可以实现我想要做的事情吗?

4

1 回答 1

2

我注意到的第一件事是,在父级中您正在列出一个名为的事件,initAsLoaded但在子级中您正在调度一个名为childLoaded. 监听一个永远不会被分派的事件可能不是一个好主意。

但是,这不是实际问题,因为修复事件并不能解决问题。主要问题是,在child.swf 的第一帧的代码执行之后,调度了onLoadInit来自的事件。这意味着在 child.swf 中,您将在第一帧上调度一个没有人监听的事件,因为尚未调用。MovieClipLoaderonLoadInit

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

父级第一帧:

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

儿童第二帧:

stop();

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

trace("Child dispatching: childLoaded");

希望这可以帮助...

于 2009-08-07T05:05:03.543 回答