0

所以,我想清理我的整个舞台。我已经在互联网上进行了搜索,不幸的是,我的情况没有任何效果。

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

while(numChildren > 0)
    removeChildAt(0);

然而,这只适用于我调用它的当前影片剪辑,其中不包括我生成的迷宫。我只想彻底摆脱一切。关于如何做到这一点的任何想法?

4

2 回答 2

6

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

while(stage.numChildren > 0)
{
  stage.removeChildAt(0);
}
于 2012-10-15T17:01:08.067 回答
5

只需将其从舞台上移除:

stage.removeChildren();

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

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

要将其从内存中删除,与 有关系的所有对象displayObject都应设置为空。这包括事件侦听器和来自/到non-displaylist相关对象的关系。

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

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

您可以使用来自 Temple Library 的Doob 先生统计数据性能统计数据来分析内存。删除所有剪辑时,您应该会在一段时间后看到一个丢弃(垃圾收集)。多次删除后,内存指标不应该更高。

于 2012-10-16T09:16:02.027 回答