如何从 AS3 中的场景中删除所有 MovieClips、Sprites 和图形?

How to remove all MovieClips, Sprites and graphics from a scene in AS3?

我有一个场景,包括所有 MovieClip、Sprites 和图形,我使用 addChild(...) 将其中一些带到了舞台上。

我想把它们都去掉,因为我去其他场景的时候还能看到它们。

我使用了下面的代码,但它显示了下面提到的错误:

btn.addEventListener(MouseEvent.CLICK,removing);

function removing(e:MouseEvent):void
{
  while (stage.numChildren > 0)
  {
    stage.removeChildAt(0);
  }

}

错误:

TypeError:错误 #1009:无法访问 属性 或空对象引用的方法。 在 Show_fla::MainTimeline/removing()

提前感谢您的宝贵时间和帮助!

如图所示,它不使用 while 循环,而是使用 for 循环|:

btn.addEventListener(MouseEvent.CLICK,removing);

function removing(e:MouseEvent):void
{
 var i:int = 0;
 for (i=stage.numChildren-1; i>=0; i--)
 {
    stage.removeChildAt(i);
 }
}

属性 DiaplayObject.stage 仅在给定的 DisplayObject 实际附加到舞台时定义。一旦您删除包含删除代码的 Sprite/MovieClip ,它的 .stage 就会变为 null 并且下一个条件检查 stage.numChildren 自然会失败。您应该在局部变量中保留对阶段的引用。

btn.addEventListener(MouseEvent.CLICK,removing);

function removing(e:MouseEvent):void
{
  var aStage:Stage = stage;

  while (aStage.numChildren > 0)
  {
    aStage.removeChildAt(0);
  }
}

如果您添加要删除的对象的踪迹,您会看到您删除了 [object MainTimeline],因此您甚至不需要循环。

在您的代码中,您删除了 [object MainTimeline],所有剪辑都被删除。 在 while 循环中,它抛出一个不在 for 循环中的错误。

function removing(e:MouseEvent):void {
    var i:int = 0;
    for (i=stage.numChildren-1; i>=0; i--)
    {
        trace("removing : " + (stage.getChildAt(i)));
        stage.removeChildAt(i);
    }
}

输出:

removing : [object MainTimeline]

所以您删除了对象 [object MainTimeline] 并且没有更多的子项可以删除。

function removing(e:MouseEvent):void {
    trace("removing : " + (stage.getChildAt(0)));
    stage.removeChildAt(0);
}

可能会给你相同的输出:

removing : [object MainTimeline]

因此,如果 [object MainTimeline] 被删除,您甚至不需要循环。

我没有在相同的条件下测试它,所以请告诉我们你是否有相同的输出。

我建议您查看@LukeVanIn 的回答,其中解释了 difference between stage, root and main timeline

[编辑]

function removingWhile(e:MouseEvent):void {
    while (stage.numChildren > 0){
    count++;
    trace("removing : " + (stage.getChildAt(0)));
    trace ("number of iterations = " + (count++).toString())
    stage.removeChildAt(0);
  }
}

将输出:

正在删除:[对象 MainTimeline] 迭代次数 = 1

类型错误:错误 #1009... 在 Untitled_fla::MainTimeline/removingWhile()

[/编辑]