如何从AS3中的场景中删除所有MovieClip,Sprite和图形?

时间:2017-01-01 02:35:39

标签: actionscript-3 actionscript flashdevelop

我有一个包含所有MovieClip,Sprite,图形的场景,我使用addChild(...)将其中一些带到舞台上。

我想删除所有这些,因为当我去其他场景时我仍然可以看到它们。

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

btn.addEventListener(MouseEvent.CLICK,removing);

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

}

错误:

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

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

3 个答案:

答案 0 :(得分:2)

如图所示,它不适用于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);
 }
}

答案 1 :(得分:1)

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

btn.addEventListener(MouseEvent.CLICK,removing);

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

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

答案 2 :(得分:1)

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

在您的代码中删除[对象MainTimeline]并删除所有剪辑。 在while循环中,它会在for循环中抛出Error。

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]

因此,您删除了对象[对象MainTimeline],并且不再有要删除的子项。

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

可能会给你相同的输出:

removing : [object MainTimeline]

所以如果[对象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

TypeError:错误#1009 ......     在Untitled_fla :: MainTimeline / removedWhile()

[/编辑]