Flash AS3事件监听器错误



我有这一点AS3代码。它加载一个外部.swf文件,并应该播放它。我添加了一个事件侦听器,以便在加载文件时运行。它调用的函数将视频移动到最底层,这样按钮仍然显示,然后播放文件。问题是事件侦听器永远不会触发。有人能帮忙吗?提前谢谢。

戴夫

    var loadit:Loader = new Loader();
    var load_request:URLRequest = new URLRequest("http://www.friedmanllp.com/video/intro.swf");
    loadit.addEventListener(Event.COMPLETE, onCompleteHandler);
    //swfLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
    //loadit.load(load_request);
    function onCompleteHandler(loadEvent:Event) {
        addChildAt(loadEvent.currentTarget.content, 1);
        loadit.load(load_request);
    }

有几个地方不对。

首先,你的加载器永远不会加载,因为你从来没有要求它加载。你把load方法调用注释掉了

还有,听听crooksy88。你需要监听完成事件的contentLoaderInfo属性。监听Loader实例不会分派您正在寻找的事件。

还有一个警告——确保你的loadit变量没有被垃圾收集!如果你发布的代码是在一个函数调用中运行,那么你需要在某个地方持久化你的Loader实例(例如,到一个实例变量),以确保它留在内存中。

代码应该看起来像这样:

var load_request:URLRequest = new URLRequest("http://www.mydomain.com/mySubFolder/myExternal.swf");
var loadit:Loader = new Loader();
loadit.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
loadit.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
loadit.load(load_request);
function onProgressHandler(event:ProgressEvent):void
{
    trace("onProgressHandler(event)");
}
function onCompleteHandler(event:Event):void
{
    trace("onCompleteHandler(event)");
    addChildAt(loadit, 1);
}

试试这个…

loadit.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);   

我用Event解决了这个问题。初始化:

    var loadit:Loader = new Loader();
    var load_request:URLRequest = new URLRequest("http://www.friedmanllp.com/video/intro.swf");
    loadit.contentLoaderInfo.addEventListener(Event.INIT, onCompleteHandler);  
    loadit.load(load_request);
    function onCompleteHandler(loadEvent:Event) {
        addChildAt(loadEvent.currentTarget.content, 1);
    }

基于Fingers的短版本

var loadIt:Loader = new Loader();
on(loadIt.contentLoaderInfo).complete += function (e:Event) {
    addChildAt(e.currentTarget.content, 1);
}
loadIt.load(new URLRequest("http://www.friedmanllp.com/video/intro.swf"));

最新更新