Performance Flash actionscript 3游戏性能-删除对象并重置属性
我正在开发一个flash游戏,它要求我在运行时将类中的对象实例化到场景中,并通过代码删除这些对象。 这很好,我可以在游戏中动态添加和删除实例,但是大约两分钟后,它开始严重滞后,最终会一起崩溃 我使用Performance Flash actionscript 3游戏性能-删除对象并重置属性,performance,actionscript-3,flash,object,cpu,Performance,Actionscript 3,Flash,Object,Cpu,我正在开发一个flash游戏,它要求我在运行时将类中的对象实例化到场景中,并通过代码删除这些对象。 这很好,我可以在游戏中动态添加和删除实例,但是大约两分钟后,它开始严重滞后,最终会一起崩溃 我使用numchildren()跟踪场景中有多少个对象,似乎有些实例没有被正确删除,因为跟踪的对象数将增加,最终达到近2000个对象 我正在使用removeChild()删除这些对象,并试图找出这些对象仍在场景中的原因。 我在某个地方读到,如果对象没有正确重置,它们可能仍然使用cpu 我对使用flash还是
numchildren()
跟踪场景中有多少个对象,似乎有些实例没有被正确删除,因为跟踪的对象数将增加,最终达到近2000个对象
我正在使用removeChild()
删除这些对象,并试图找出这些对象仍在场景中的原因。
我在某个地方读到,如果对象没有正确重置,它们可能仍然使用cpu
我对使用flash还是个新手,我的主要问题是——如何找出哪些对象没有被删除,如何将它们完全从游戏中删除?
除了简单的
removeChild()
part之外,我还需要向代码中添加什么
非常感谢您的帮助。请提供使用removeChild()方法的代码部分 一般情况下,您应该这样使用removeChild():
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
var movieClip:MovieClip;
var timer:Timer=new Timer(5000, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
makeMovieClips();
function makeMovieClips() {
for (var i:int; i<2000; i++) {
movieClip=new MovieClip();
movieClip.graphics.beginFill(Math.random()*0xFFFFFF);
movieClip.graphics.drawCircle(Math.random()*stage.stageWidth, Math.random()*stage.stageHeight, Math.random()*40);
movieClip.graphics.endFill();
addChild(movieClip);
}
trace (numChildren) // should output 2000;
timer.start();
}
function onTimerComplete(e:TimerEvent):void {
while (numChildren>0) {
movieClip=getChildAt(0) as MovieClip;
removeChild(movieClip);
// or we can use removeChildAt(0); instead of 2 lines above
}
trace (numChildren) // should output 0, because all objects are removed from display list;
}
感谢您的回复,我现在已经通过使用此.contains()进行调试找到了所有未删除对象的原因,以查看某些对象是否仍在场景中,结果发现我只是忘记了在代码的另一部分添加removeChild()语句。然而,你的答案的第二部分是非常有用的-删除参考。。在我的代码中,我一直保留着我实例化的所有对象的数组,这就是我引用它们的方式。以movieClip=null为例;删除实例后,我已将数组引用设置为null。
movieClip=null;