2011-09-23 6 views
0

내가 무기한 바퀴처럼 회전 육각 애니메이션을 시도하고 반복하지 않습니다트윈 무기한

function rotateCW(e:TweenEvent = null):void{ 
    var hexRot:Tween = new Tween(this, "rotationZ", None.easeNone, 0, 360, 2, true); 
    hexRot.addEventListener(TweenEvent.MOTION_FINISH, rotateCW);   
} 

을 애니메이션이 반복 임의의 시간 후에 중지 어떤 이상한 이유로. 그것은 멈추기 전에 2 배에서 600 배까지 변화합니다.

내 응용 프로그램의 모든 곳에서 여러 가지 다른 이벤트가 발생했습니다. MOTION_FINISH 이벤트가 발생하지 않거나 잡히지 않을 수도 있습니다.

감사합니다.

+0

이 체크에 대해 외부 트윈 클래스를 사용하는 것이 좋습니다. www.greensock.com을 사용하면 더 나은 방법, 성능 및 사용 편의성을 얻을 수 있습니다. – hardik

답변

1

먼저 hexRot을 정의하고 함수의 MOTION_FINISH 외각을 들어야합니다. 여러분이하는 것처럼, 모든 hexRot은 리스너가 첨부되어 있기 때문에 메모리에 남아 있습니다.

이것은 문제를 해결하지 못할 수도 있지만 일을 작성하는 데 더 깨끗한 방법이되며 이상한 행동에 덜 취약합니다.

private var hexRot:Tween; 

/** 
*Run only once 
*/ 
function init():void { 
    hexRot = new Tween(this, "rotationZ", None.easeNone, 0, 360, 2, true); 
    hexRot.addEventListener(TweenEvent.MOTION_FINISH, rotateCW); 
} 

function rotateCW(e:TweenEvent = null):void{  
    hexRot.start();  
} 
+0

감사합니다. 메모리에 남아있는 모든 hexRot에 대한 귀하의 의견이 맞습니다. 문제가 메모리가 부족하거나 사용 가능한 이벤트 리스너가없는 것으로 가정하고 가비지 수집기가 정리됩니다. 코드를 분리하고 트위닝 및 이벤트 선언을 생성자에 넣고 간단히 start()를 외부에 호출했습니다. 매력처럼 작동합니다! – getack

1

플래시 가비지 컬렉터가 hexRot 변수를 지우므로 애니메이션이 중지되었습니다. 이 문제를 해결하려면 Kodiak에서 제공 한 솔루션을 사용하십시오. 변수가 전역 적으로 선언되면 변수에 새로운 것을 넣지 않는 한 수집되지 않습니다.

관련 문제