windrunner31
27.10.2011, 22:53
Я поставил FlashPreloadProfiler и из интереса решил поглядеть,что там у меня с быстродействием?
И заметил,что во вкладке MemoryProfiler,скапливаются экземпляры разнообразных классов,которые я вроде-бы обнуляю,и вот возник вопрос - как правильно обнулить экземпляры класса,чтобы они удалялись окончательно?
Просто у меня в этой же игре возникают тормоза и я думаю,что это,возможно из-за этого.
К примеру вот эта функция:
public class TimedAnimation
{
private var mv:MovieClip;
private var t:Timer;
private var tf:int; // totalFrames
private var f:Function;
public function TimedAnimation(mv:MovieClip,f:Function,sf:int = 1, ef:int = 0 )
{
if (ef == 0)
{
ef = mv.totalFrames;
}
this.tf = ef;
this.mv = mv;
this.f = f;
t = new Timer(25)
t.addEventListener(TimerEvent.TIMER, onTimerTick);
t.start();
}
private function onTimerTick(e:TimerEvent):void
{
mv.nextFrame();
if (mv.currentFrame == tf)
{
t.stop();
t.removeEventListener(TimerEvent.TIMER, onTimerTick);
f(mv);
t = null;
mv = null;
f = null;
}
}
}
Вызываемая таким образом:
private var Animator:TimedAnimation;
Animator = new TimedAnimation(mv3, onAnimationComplete);
Создает утечку одного таймера и двух функций,хотя я,вроде бы,все обнуляю и,по возможности,удаляю.
И заметил,что во вкладке MemoryProfiler,скапливаются экземпляры разнообразных классов,которые я вроде-бы обнуляю,и вот возник вопрос - как правильно обнулить экземпляры класса,чтобы они удалялись окончательно?
Просто у меня в этой же игре возникают тормоза и я думаю,что это,возможно из-за этого.
К примеру вот эта функция:
public class TimedAnimation
{
private var mv:MovieClip;
private var t:Timer;
private var tf:int; // totalFrames
private var f:Function;
public function TimedAnimation(mv:MovieClip,f:Function,sf:int = 1, ef:int = 0 )
{
if (ef == 0)
{
ef = mv.totalFrames;
}
this.tf = ef;
this.mv = mv;
this.f = f;
t = new Timer(25)
t.addEventListener(TimerEvent.TIMER, onTimerTick);
t.start();
}
private function onTimerTick(e:TimerEvent):void
{
mv.nextFrame();
if (mv.currentFrame == tf)
{
t.stop();
t.removeEventListener(TimerEvent.TIMER, onTimerTick);
f(mv);
t = null;
mv = null;
f = null;
}
}
}
Вызываемая таким образом:
private var Animator:TimedAnimation;
Animator = new TimedAnimation(mv3, onAnimationComplete);
Создает утечку одного таймера и двух функций,хотя я,вроде бы,все обнуляю и,по возможности,удаляю.