开发者问题收集

如何从 AS3 中的场景中删除所有影片剪辑、精灵和图形?

2017-01-01
379

我有一个场景,其中包括所有 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()

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

3个回答

正如它所示,它不能与 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);
 }
}
mazName
2017-01-01

仅当给定的 DisplayObject 实际附加到舞台时,才会定义属性 DiaplayObject.stage。一旦您删除了包含删除代码的 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);
  }
}
Organis
2017-01-01

如果您添加要删除的对象的踪迹,您将看到您删除了 [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 的答案,其中解释了 阶段、根时间线和主时间线之间的区别

[EDIT]

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

将输出:

删除:[object MainTimeline] 迭代次数 = 1

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

[/EDIT]

tatactic
2017-01-03