快乐前万圣节前夕大家:)使用removeChild方法时得到错误
我今天的问题是我得到的时候删除一个子对象的DisplayObject错误。我有代码将启动(addChild)视频容器和视频控件以及添加关闭按钮。 Now the close button works fine and everything,删除视频和控制,我能够再次选择其他的视频,但是当您单击关闭第二次我得到这个错误:
引发ArgumentError:错误#2025:提供的DisplayObject必须的孩子呼叫者,召集者。在flash.display一::级DisplayObjectContainer/removeChild之()
所以我已经缩小的问题,我删除videoContainer(持有该视频对象)
我的代码,以播放视频:
public function videoSwitch(videoName):void
{
nv.closeOut();
nv.resetNav = false;
if (!videoPlaying)
{
vc = new VideoClass(videoName, videoHolder);
vc.addEventListener("KillMovie", removePlayer);
container.addChild(videoContainer);
container.addChild(vc);
//container.addChildAt(videoContainer, 1);
//container.addChildAt(vc, 2);
videoPlaying = true;
closeVideo();
}
else if (videoPlaying)
{
vc.clearSource();
container.removeChild(videoContainer);
container.removeChild(vc);
vc = new VideoClass(videoName, videoHolder);
vc.addEventListener("KillMovie", removePlayer);
container.addChild(videoContainer);
container.addChild(vc);
//container.addChildAt(videoContainer, 1);
//container.addChildAt(vc, 2);
closeVideo();
}
trace("videoPlaying = "+videoPlaying+"\r");
}
收出视频播放器代码: 你可以在我的意见看其他代码我试过了,但仍然得到错误。
function closeVideo():void
{
closeBtn.visible = true;
closeBtn.x = 770;
closeBtn.y = 20;
closeBtn.buttonMode = true;
container.addChild(closeBtn);
closeBtn.addEventListener(MouseEvent.MOUSE_UP, closeButtonClicked);
function closeButtonClicked(event:MouseEvent):void
{
vc.clearSource();
container.removeChild(videoContainer);
//container.removeChildAt(videoContainer, 1);
container.removeChild(vc);
videoPlaying = false;
closeBtn.visible = false;
}
}
现在my movie工作正常,但我担心,这个错误在后台发生的事情(和显示在我的输出窗口上)最终会导致一个问题,别的地方:(
预先感谢在这一个任何眼睛:)
UPDATE: 修复!问题是我删除了杀VC听众,却忘了删除愚蠢关闭Mouse_Event听众:(
function addCloseButton():void
{
container.addChild(closeBtn);
closeBtn.addEventListener(MouseEvent.MOUSE_UP, closeButtonClicked);
function closeButtonClicked(event:MouseEvent):void
{
videoPlaying=false;
vc.clearSource();
removeContainerChildren(); // <- thx Joel!
closeBtn.removeEventListener(MouseEvent.MOUSE_UP, closeButtonClicked);
//^ Forgot this line - thx Jotham!
container.removeChild(closeBtn);
}
}
不知道这个图形帮助,但:
你不需要多次调用closeVideo()。它应该只被调用一次。初始化您的容器时,因为它对每个视频都很常见。只需调用closeButtonClicked()函数即可清除视频源,然后移除videoClass和videoContainer,而不是关闭视频。通过多次调用closeVideo,您正在为closeButton创建多个处理程序,这会导致此运行时错误。 – bhups 2009-10-31 08:39:32