【发布时间】:2010-12-11 17:32:46
【问题描述】:
祝大家万圣节前快乐 :)
我今天的问题是删除子对象时出现的 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");
}
关闭视频播放器代码: 您可以在我的 cmets 中看到我尝试过的其他代码,但仍然出现错误。
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 工作正常,但我担心这个错误发生在后台(并显示在我的输出窗口中)最终会导致其他问题:(
在此先感谢您的关注! :)
更新: 已修复! 问题是我删除了 kill VC 侦听器,但忘记删除愚蠢的 Close Button 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 创建多个处理程序,这会导致此运行时错误。
标签: flash actionscript-3 addchild displayobject removechild