如何从 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()
[/编辑]
我有一个场景,包括所有 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()
[/编辑]