我正在尝试加载一个本地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});现在,我希望这会起作用,并且父级在跟踪中会有"childLoaded caught 2“,但它没有。
有没有办法实现我想要做的事情?
发布于 2009-08-07 05:05:04
我注意到的第一件事是,在父进程中,您列出了一个名为initAsLoaded的事件,而在子进程中,您调度了一个名为childLoaded的事件。侦听永远不会被调度的事件可能不是一个好主意。
然而,这并不是真正的问题,因为修复事件并不能解决问题。主要的问题是来自MovieClipLoader的onLoadInit事件是在child.swf的第一帧代码被执行之后被调度的。这意味着在child.swf中,由于onLoadInit还没有被调用,所以您在第一个帧上调度了一个没有人监听的事件。
要解决此问题,您只能从第二个帧开始调度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");希望这能帮到你。
https://stackoverflow.com/questions/1240103
复制相似问题