2011-09-23 40 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 outisde。通过这样做,每个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

Flash垃圾回收器清理了你的hexRot变量,所以动画停止了。要解决这个问题,请使用Kodiak提供的解决方案:)当变量被全局声明时,只要不在变量中添加任何新内容,它就不会被收集。