删除舞台AS3中的所有内容

the*_*uls 0 actionscript-3 movieclip

所以,我想要清除整个舞台.我已经在互联网上搜索了,很遗憾没有任何东西对我的情况有用.

基本上,我正在做的是一个有点复杂的迷宫生成器,在我创建一个新的之前,我想摆脱之前创建的所有内容.到目前为止,我听说从舞台上删除动画片段的最佳方法是使用以下方法购买:

while(numChildren > 0)
    removeChildAt(0);
Run Code Online (Sandbox Code Playgroud)

然而,这仅适用于我称之为的当前动画片段,其中不包括我生成的迷宫.我只想摆脱绝对的一切.关于如何做到这一点的任何想法?

Sim*_*dle 6

你正在思考正确的思路,你可以使用numChildren,removeChildAt但是你需要在舞台的范围内调用它们:

while(stage.numChildren > 0)
{
  stage.removeChildAt(0);
}
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,这些天我们可以访问[removeChildren()](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObjectContainer.html#removeChildren%28%29 ) (3认同)

Mar*_*nol 5

要从舞台上删除它:

stage.removeChildren();
Run Code Online (Sandbox Code Playgroud)

只是从舞台上删除剪辑并不总是等于从内存中删除它们

removeChildren,removeChild或removeChildAt实际上并没有从内存中删除Sprite或任何其他DisplayObject ,它只是从displaylist中删除它.这意味着如果你创建1000个精灵并将它们添加到舞台(displaylist),然后使用removeChildren它们仍然可以存在于内存中(永远).然后你有内存泄漏.

要从内存中删除它,所有与displayObject有关系的对象都应设置为null.这包括事件监听器和/与非置换列表相关对象的关系.

如果你想确保所有相关的东西都应该消失,只需将其置空并检查以下内容:

  • 使用removeChild或removeChildAt或removeChildren将其从displaylist中删除.(注意这可以从舞台上完成)
  • 删除附加到剪辑的所有eventListener,或使用事件侦听器.
  • 如果您在Array,Vector,Dictionary或任何其他对象中使用了引用,请将其从对象中删除,将其设置为null或使用Array.splice()将其拼接
  • 应清除setTimeout/setInterval
  • 设置object = null

您可以使用Temple Library中的Mr Doob统计数据性能统计数据来描述记忆.删除所有剪辑后,您应该在一段时间后看到丢弃(垃圾收集).多次删除后,内存指示灯不应该更高.