删除舞台AS3中的所有内容

时间:2012-10-15 16:42:54

标签: actionscript-3 movieclip

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

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

while(numChildren > 0)
    removeChildAt(0);

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

2 个答案:

答案 0 :(得分:6)

您正在思考正确的问题,您可以使用numChildrenremoveChildAt但是您需要在舞台范围内调用它们:

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

答案 1 :(得分:5)

要从舞台上删除它:

stage.removeChildren();

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

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

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

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

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

您可以使用Temple Library中的Mr Doob statsperformance stats来分析内存。删除所有剪辑后,您应该在一段时间后看到丢弃(垃圾收集)。多次删除后,内存指示灯不应该更高。