AS3:重大减速

时间:2011-08-11 03:33:50

标签: actionscript-3 memory-leaks

我正在开发Flash游戏,在运行游戏一段时间之后,帧速率会大幅下降。屏幕上同时没有很多MovieClip,但是正常使用removeChild和addChild替换MovieClip。

如何测试内存泄漏等问题?在这个问题上有哪些优秀的AS3编程标准?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您似乎没有准备好MovieClip垃圾收集实例。 This thread 可能对您非常有帮助。

正确丢弃MovieClip(或任何其他对象)时要涵盖的一些基本内容包括:

  1. DisplayList移除对象(如果它是DisplayObject)。这是通过您已经完成的工作removeChild()
  2. 完成的
  3. 删除已应用于Object的所有事件侦听器。最好的办法是从一开始就掌握这一权利;我的意思是,当你致电addEventListener()时,请确保在不久的将来某个地方添加一个姐妹removeEventListener()
  4. 删除对象的引用。这包括但不限于:通过作为Array / Vector的一部分引用Object,通过存储在另一个Object的属性中引用,等等。
  5. 我可以提供的建议是在对象的基类中包含处理所有这些内容的方法,例如remove()deconstruct()

    以下是一个例子:

    public function deconstruct():void
    {
        if(parent)
            parent.removeChild(this);
    
        removeEventListener(MouseEvent.CLICK, _onClick);
    }
    

    当您扩展此类并需要其他解除引用功能时,只需使用deconstruct()方法构建:

    override public function deconstruct():void
    {
        removeEventListener(MouseEvent.MOUSE_OVER, _mouseOver);
    
        var i:int = someArray.indexOf(this);
        someArray.splice(i, 1);
    
        super.deconstruct();
    }