Это приложение представляет собой значительно упрощенную версию того, что я пытаюсь выполнить, сглаживание некоторых движений на экране с помощью комбинированной анимации и повторный запуск при изменении ситуации, а также использование привязок для установки некоторых значений анимации.,Анимация периодически останавливается, а затем перезапускается.Значение valueFrom не установлено, поэтому значение свойства просто продолжается от того места, где оно было, к новой цели.В этом примере я анимирую левый / верхний элемент Rect в направлении X / Y мыши, чтобы заставить его преследовать мышь.
Проблема в том, что память этого приложения продолжает расти, если вы немного подождете и продолжитепереместите мышь.Так что же мне делать, чем я не являюсь?
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="creationCompleteHandler(event)"
mouseMove="mouseMoveHandler(event)"
mouseOut="mouseOutHandler(event)"
>
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
private static const RECT_HALF_SIZE:int = 5;
private static const NO_CHASE:int = -1000;
[Bindable]
private var lastMouseX:int = NO_CHASE;
[Bindable]
private var lastMouseY:int = NO_CHASE;
private var evalTimer:Timer = new Timer(100);
protected function creationCompleteHandler(event:FlexEvent):void
{
evalTimer.addEventListener(TimerEvent.TIMER, function(event:TimerEvent):void { evalChase(); });
evalTimer.start();
}
protected function mouseOutHandler(event:MouseEvent):void
{
lastMouseX = lastMouseY = NO_CHASE;
evalChase();
}
protected function mouseMoveHandler(event:MouseEvent):void
{
const reStart:Boolean = (lastMouseX == NO_CHASE);
lastMouseX = event.localX;
lastMouseY = event.localY;
if(reStart)
evalChase();
}
private function evalChase():void
{
doChase.stop();
doChase.end();
if(lastMouseX == NO_CHASE)
return;
doChase.play();
}
]]>
</fx:Script>
<fx:Declarations>
<s:Linear id="linearEaser" />
<s:Parallel
id="doChase"
duration="2000"
>
<s:Animate target="{chaser}" easer="{linearEaser}" >
<s:SimpleMotionPath property="left" valueTo="{lastMouseX-RECT_HALF_SIZE}" />
</s:Animate>
<s:Animate target="{chaser}" easer="{linearEaser}" >
<s:SimpleMotionPath property="top" valueTo="{lastMouseY-RECT_HALF_SIZE}" />
</s:Animate>
</s:Parallel>
</fx:Declarations>
<s:Rect
id="chaser"
top="0" left="0"
width="{2*RECT_HALF_SIZE}" height="{2*RECT_HALF_SIZE}"
>
<s:fill>
<s:SolidColor color="red" />
</s:fill>
</s:Rect>
</s:WindowedApplication>