0

这是一个使用视频类将特定视频加载到 0.0 的 MovieClip 容器的函数。

public var mainVideo:SimpleVideo;

public function loadVideo(videoString:String) :void{
    mainVideo = new
    SimpleVideo("videos/"+videoString+".flv","",true,video_container.positionMc);
    video_container.addEventListener(MouseEvent.MOUSE_DOWN,controlVideoPlayer);
    addChild(mainVideo);
    trace('adding new video to container');
}

我想最好在每次加载视频时检查一下是否已经加载了另一个视频。如果有,则将其删除,然后添加新视频。

我尝试过removeChild()以多种方式使用,但似乎无法正常工作。

我会用removeChild(mainVideo)吗?video_container.removeChild(mainVideo)? 我如何能够检查是否已经存在mainVideo

任何帮助将不胜感激!

-更新-如果我尝试使用removeChild(mainVideo)我会收到此错误:

TypeError:错误 #2007:参数 child 必须为非空。
在 Flash.display::DisplayObjectContainer/removeChild()
在 Main/removeVideo() 在 MethodInfo-127()

4

2 回答 2

0

我希望这个回复可以帮助你

--> 我会用removeChild(mainVideo)吗?video_container.removeChild(mainVideo)?

您应该使用removeChild函数,但您需要知道谁是 mainVideo 的父级并调用其父级的此函数,在您的情况下,我认为video_container不是父级,因为它是 mainVideo 附近的变量,并且您将 mainVideo 添加到类的实例中有loadVideo功能的

有时您可以使用mainVideo.parent.removeChild(mainVideo), 不是最好的方法,但它有效,最好知道谁是父级并removeChild()在该“父级”上明确调用函数

--> 我可以检查是否已经存在 mainVideo 吗?

好吧,你可以做一个简单的if(mainVideo != null) { .. }因为在函数 loadVideo 中你每次都会创建新实例,这意味着如果你至少调用了一次这个函数,那么if条件应该是 true,这意味着你已经有一个现有的 mainVideo

-->TypeError: Error #2007: Parameter child must be non-null.

这意味着您的 mainVideo 未实例化,因为我猜您尚未调用loadVideo(),这就是@putvande 要求您提供更多代码的原因,我们需要查看您在何时何地调用removeChild()

于 2013-08-08T09:52:47.487 回答
0

如果您将视频添加到容器影片剪辑而不是舞台上,并且该容器一次在其显示列表中只有一个 SimpleVideo 实例,您可以执行以下操作:

if( myVideoContainer.numChildren > 0 )
{
    myVideoContainer.removeChild( myVideoContainer.getChildAt( 0 ) );
}

不过,更大的问题是您使用的 SimpleVideo 类如何自行清理。大多数视频类都有一个清理或终止函数,可以删除侦听器并清理 netStream。我认为您需要调用类似的方法以及从容器中删除视频实例。

于 2013-08-07T23:15:43.220 回答