removeChild所以我可以加载新的FLV_Player

时间:2011-10-26 20:22:11

标签: flash actionscript-3 removechild

我正在制作一个带有播放列表的flv播放器,其中包含英语和西班牙语版块。英语是默认部分,效果很好但是当我点击“西班牙语”按钮时,我试图删除在开始时添加的所有孩子,并运行两个加载我的西班牙语数据的新功能。

唯一的问题是removeChild无效。我可以听到我的西班牙语视频加载,但英语版仍然在后台播放。

我需要完全删除main_container.addChild (my_player);

这是应该完成所有工作的功能:

function playSpanish (evt:MouseEvent){
    main_container.removeChild(my_player);
    gotoAndStop(2);
    trace("IN SPANISH");
}

4 个答案:

答案 0 :(得分:1)

确保您已停止播放器:

my_player.stop();

如果要从main_container中删除所有子项,您可以:

while(main_container.numChildren > 0)
{
    main_container.removeChildAt(0);
}

答案 1 :(得分:1)

对不起,这对你来说有点晚了,但对未来的读者来说会很有用。这个问题一直是我的许多项目的祸根。这是解决方案:

my_container.removeChild(my_flvplayer_instance);

my_flvplayer_instance.getVideoPlayer(0).close();

my_flvplayer_instance=null;

密钥为getVideoPlayer(0).close();,用于关闭隐藏在FLVPlayback组件中的网络流。

答案 2 :(得分:0)

如果您正在使用网络流,则需要关闭与流的连接,您是如何实现此播放器的?

答案 3 :(得分:0)

从舞台上删除显示对象(my_player)不会阻止其功能正常工作。你只是不会看到它 这就是垃圾收集失败并造成内存泄漏的原因 您需要执行以下操作。

function playSpanish (evt:MouseEvent){
    // make sure you call stop on the video to you know it is not playing
    my_player.stop()

    // remove it from the container/stage
    main_container.removeChild(my_player);

    // remove all event listeners
    my_player.removeEventlistener( EVENT, funcName );

    // null the object out to help promote garbage collection
    my_player = null;


    // do your other code here
    gotoAndStop(2);
    trace("IN SPANISH");
}