错误 #2025:显示对象必须是来自调用方的子项



您好,我在帧上有一些视频的演示文稿时遇到了麻烦,我制作了一些按钮来观看每个视频,当我移动到下一帧时没关系,视频"消失"了,我可以正确阅读该帧上的信息,但问题是当我尝试前进时, 它只是不动,就像它被卡住了什么的。这是我的代码:

var video10:Video=new Video();
var conexion10:NetConnection= new NetConnection();
miguel_btn.addEventListener(MouseEvent.CLICK,video_miguel);
function video_miguel(event:MouseEvent):void
{
   var mensaje10:String="MIGUEL ANZALDUA"
puesto_txt.text=mensaje10
var mensaje10_1:String="HR MEXICO"
puesto2_txt.text=mensaje10_1
conexion10.connect(null);
var display10:NetStream= new NetStream(conexion10);
display10.play("Miguel_1.flv");
video10.attachNetStream(display10);
video10.x= 150;
video10.y= 250;
stage.addChild(video10);
display10.addEventListener(AsyncErrorEvent.ASYNC_ERROR,nomostrar10);
function nomostrar10(event:AsyncErrorEvent):void
{
}
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown10);
function handleKeyDown10(ke:KeyboardEvent):void {
    if(ke.keyCode == 39) 
    {
    stage.removeChild(video10);
    }
}

我在这里读了一些答案,但我无法弄清楚。我真的不知道会发生什么。谢谢。

该错误准确地告诉您问题所在:要调用removeChild(),要删除的子项实际上必须是该对象的子项。如果不是,则会收到错误。

快速浏览一下您的代码让我相信问题就在这里:

stage.removeChild(video10);

因为每次按下键 39 时都会发生这种情况,所以它有可能被移除两次。在大多数情况下,您应该弄清楚如何修复错误,但在这种情况下,如果不完全删除逻辑,就无法修复它。

因此,您可以使用此修复程序。现在,您不应该一揽子使用它来摆脱运行时错误。我想强调这一点。这是一个适用于此实例的简单检查,但在大多数情况下,您应该找到问题的根源并修复它。

if ( video10.parent == stage ) {
    stage.removeChild(video10);
}

这将在删除video10之前验证它实际上是stage的子项。同样,这不是通用解决方案,应仅在根本问题是必要逻辑的特定情况下使用。