0

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

唯一的问题是 removeChild 不起作用。我可以听到我的西班牙语视频加载,但英语视频仍在后台播放。

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

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

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

4 回答 4

1

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

my_container.removeChild(my_flvplayer_instance);

my_flvplayer_instance.getVideoPlayer(0).close();

my_flvplayer_instance=null;

关键是getVideoPlayer(0).close();关闭隐藏在 FLVPlayback 组件中的网络流。

于 2012-01-08T22:29:36.240 回答
1

确保您已停止播放器:

my_player.stop();

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

while(main_container.numChildren > 0)
{
    main_container.removeChildAt(0);
}
于 2011-10-26T20:30:27.123 回答
0

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

于 2011-10-26T20:46:28.070 回答
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");
}
于 2011-10-26T21:06:38.097 回答