Tween不会无限重复

时间:2011-09-23 10:09:13

标签: flash actionscript-3 events flash-cs5

我试图动画一个像轮子一样无限旋转的六边形:

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事件无法触发或未被捕获吗?

谢谢!

2 个答案:

答案 0 :(得分: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();       
}

答案 1 :(得分:1)

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