我正在制作一个带有播放列表的flv播放器,其中包含英语和西班牙语版块。英语是默认部分,效果很好但是当我点击“西班牙语”按钮时,我试图删除在开始时添加的所有孩子,并运行两个加载我的西班牙语数据的新功能。
唯一的问题是removeChild无效。我可以听到我的西班牙语视频加载,但英语版仍然在后台播放。
我需要完全删除main_container.addChild (my_player);
这是应该完成所有工作的功能:
function playSpanish (evt:MouseEvent){
main_container.removeChild(my_player);
gotoAndStop(2);
trace("IN SPANISH");
}
答案 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");
}