我正在尝试加载一个本地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”,但事实并非如此。
有没有办法实现我想要做的事情?
答案 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 );
希望这会有所帮助......