2011-11-07 180 views
-1

我有这一点的AS3代码。它加载一个外部.swf文件,并应该播放它。我已经添加了一个事件监听器来加载文件时运行。它调用的功能将视频移动到最底层,这样按钮仍然显示,然后播放该文件。问题是事件监听器从不触发。任何人都可以帮忙吗?提前致谢。Flash AS3事件监听器错误

戴夫

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); 
    } 
+0

为什么你的第一个电话/ /loadit.load(load_request);评论?看来你的loader没有加载任何数据 – zaynyatyi

+0

'onCompleteHandler'事件的目的是什么?调用load方法之前如何调度? – Benny

+0

当视频被占用到正确的图层之前,我已经将视频注释掉了。所以你会听到它,但没有看到它几秒钟。可能是Event.COMPLETE。我首先尝试在addChildAt代码行之后移动加载事件。所以......我使用了Event.INIT,并负责处理它。你能否删除-1。尽管我最终自己解决了这个问题,但我觉得这是一个非常有效的问题。 –

回答

0

我解决它使用Event.INIT:

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

尝试......

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

我曾尝试过,从未工作过。没有为此预先加载。它只是运行。这很重要吗? –

3

有两件事情是错误的。

首先,你的加载器永远不会加载,因为你从来没有问过它。您将加载方法调用注释掉了。

另外,听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); 
} 
+0

感谢您的详细回复。我已经通过使用Event.INIT来解决它,而不是Event.COMPLETE。 –

0

短版本的基础上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"));