AS3 Video COMPELETE事件处理程序无法正常工作?的addEventListener(Event.COMPLETE

时间:2012-11-01 15:15:47

标签: actionscript-3

您好我正在使用FLVPlayback 2.5组件并收到此错误,请帮忙! - 无法将fl.video转换为flash.events.VideoEvent。

as3代码使用 -

            comp.addEventListener(Event.COMPLETE, videoComplete);

            function videoComplete(event:VideoEvent):void {
                trace("videoComplete");
            }

完整错误 -

  

TypeError:错误#1034:类型强制失败:无法转换   fl.video::VideoEvent@6e974dd1到flash.events.VideoEvent。在   flash.events :::EventDispatcher / dispatchEventFunction()at   flash.events :::EventDispatcher / dispatchEvent()at   fl.video::FLVPlayback/http://www.adobe.com/2007/flash/flvplayback/internal::handleVideoEvent()     在flash.events::EventDispatcher/dispatchEventFunction()at   flash.events :::EventDispatcher / dispatchEvent()at   fl.video::VideoPlayer/http://www.adobe.com/2007/flash/flvplayback/internal::httpDoStopAtEnd()     在   fl.video::VideoPlayer / http://www.adobe.com/2007/flash/flvplayback/internal::httpNetStatus()

感谢ronnie!欢呼男人。这对我有用..

            import fl.video.VideoEvent;

            comp.addEventListener(Event.COMPLETE, videoComplete);

            function videoComplete(event:Event):void {
                trace("videoComplete");
            }

5 个答案:

答案 0 :(得分:4)

lostPixels在解释错误含义的过程中是正确的,但它不是VideoEvent,只是Event

 comp.addEventListener(Event.COMPLETE, videoComplete);

 function videoComplete(event:Event):void //event:Event not event:VideoEvent
 {
     trace("videoComplete");
 }

答案 1 :(得分:2)

我在那里做了评论,但我想在这里给你一个完整的解释。当你说:

addEventListener(Event.COMPLETE, videoComplete);
实际上它确实调用了你的函数......但事件与你预期的不同。这是因为它实际上正在触发一个fl.video.VideoEvent,它还有一个名为COMPLETE的常量。 Event.COMPLETE和VideoEvent.COMPLETE都是一个字符串值“complete”,所以它会调用你的函数。

第二个问题是功能:

function videoComplete(event:VideoEvent):void {

正在侦听flash.events.VideoEvent。当您使用代码完成时,这可能是一个意外。但是当你调用函数时,它会收到一个fl.video.VideoEvent ...因此错误

这样做:

import fl.video.VideoEvent;

addEventListener(VideoEvent.COMPLETE, videoComplete);

function videoComplete(event:VideoEvent):void {

你们都准备好了!

答案 2 :(得分:1)

我认为这可能与您定位的Flash播放器版本有关。 你能定位FP9或FP10吗? (在Flash Professional的“属性”面板中)

答案 3 :(得分:1)

类型强制失败是您尝试将一个严格类型变量转换为另一个变量的结果。这意味着什么(它不易被理解)是这样的:

假设我们有两个变量,一个是数字,一个是字符串。如果我们试着说number = string,Flash就会吐出那个错误,因为一个字符串不能是一个数字。

这与您的代码有关的是您尝试将事件转换为 VideoEvent

要解决此问题,请将代码更改为以下行:

  comp.addEventListener(VideoEvent.COMPLETE, videoComplete);

答案 4 :(得分:1)

您可以在视频结尾添加一个提示点,然后聆听。

假设comp是flvPlayback组件的实例名称......

import fl.video.FLVPlayback;
import fl.video.MetadataEvent;

comp.addEventListener(MetadataEvent.CUE_POINT, video_cp_listener, false, 0, true);

function video_cp_listener(eventObject:MetadataEvent):void {

//run code here when a cue point is found
trace(eventObject.info.name);

}