AS3 - 将多个视频加载到同一个容器中 - addChild removeChild

时间:2013-08-07 21:30:42

标签: actionscript-3 flash-cs6

这是一个使用视频类将特定视频加载到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

非常感谢任何帮助!

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

  

TypeError:错误#2007:参数child必须为非null。
at   flash.display :: DisplayObjectContainer / removeChild()
在   MethodInfo-127()

中的Main / removeVideo()

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分: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条件应该是真的意味着你已经存在一个mainVideo

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

这意味着你的mainVideo没有实例化,因为我猜你还没有调用loadVideo(),这就是@putvande要求你提供更多代码的原因,我们需要看看你拨打removeChild()的地点和时间