Actionscript 3 AS3:主要减速
我正在做一个Flash游戏,运行了一段时间后,帧速率大幅下降。屏幕上一次出现的MovieClips并不多,但MovieClips经常被removeChild和addChild取代Actionscript 3 AS3:主要减速,actionscript-3,memory-leaks,Actionscript 3,Memory Leaks,我正在做一个Flash游戏,运行了一段时间后,帧速率大幅下降。屏幕上一次出现的MovieClips并不多,但MovieClips经常被removeChild和addChild取代 如何测试内存泄漏等问题?关于这个问题,有哪些好的AS3编程标准?看起来您并没有为垃圾收集准备MovieClip的实例可能对您非常有帮助 正确丢弃电影剪辑(或任何其他对象)时,您希望涵盖的一些基本内容包括: 从显示列表中删除该对象(如果它是显示对象)。这是通过您正在执行的操作来完成的,removeChild() 删除已应
如何测试内存泄漏等问题?关于这个问题,有哪些好的AS3编程标准?看起来您并没有为垃圾收集准备
MovieClip
的实例可能对您非常有帮助
正确丢弃电影剪辑(或任何其他对象)时,您希望涵盖的一些基本内容包括:
显示列表
中删除该对象(如果它是显示对象
)。这是通过您正在执行的操作来完成的,removeChild()
addEventListener()
时,一定要在不久的将来添加一个姐妹removeEventListener()
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();
}
有可能你没有为垃圾收集做好准备。您是否正在删除所有事件侦听器和对MovieClips的引用?实际上,我并没有删除侦听器。我假设removeChild会自动删除添加到MovieClips中的侦听器。这似乎是问题所在。没有事件侦听器会停止对象的GCing。并非所有对象都是显示对象,但所有对象都可以分派事件。因此,在您的情况下,一个从未添加到stage的数据类将是GCed。你知道这会是一个巨大的失败吗?删除事件监听器以GC对象,当然任何子对象也需要它。还要确保从添加到其中的任何数组中删除MovieClips。