我有这个补间转换。每次单击按钮X,它会进一步移动动画片段(矩形)(varx + numberx)。
var myTween:Tween = new Tween(rectangle, "x", Strong.easeOut, currentposx, varx, 3, true);
不知怎的,如果我垃圾邮件按钮X,我的电脑会在一段时间后变慢。但不知怎的,我找不到问题的根源。我的猜测是,每当我覆盖补间转换时,先前的转换仍然保持不变。
如果补间被另一个覆盖,我必须中止补间吗?
答案 0 :(得分:1)
使用按钮永远不会减慢应用程序的速度。所以有些不对劲。
那会发生什么:
- Time 0 sec - Button click - 1. tween starts, duration 3 sec.
- Time .1 sec - Button click - 2. tween starts, duration 3 sec.
- Time .2 sec - Button click - 3. tween starts, duration 3 sec.
我们以0.1秒的间隔开始新的补间。 3 sek后。然后我们有30个tween同时运行。
此时第一个补间应该结束,从显示对象(输入框架)或计时器调度的任何事件中取消注册。显然它没有,你的应用程序通过补间添加补间,也没有完成。
可能是您的补间检查currentposx
和varx
之间的距离,并且只有两者相等时,补间才会停止。由于现在有并发补间,这种情况可能永远不会发生,并且您的补间继续尝试一次又一次地移动您的显示对象。
如果您要显示完整的运行代码,我可以在分析器中测试它。
-
无论如何,您应该将当前补间存储在持久变量(例如_currentTween
)中,并在开始新补间之前终止补间,或者只是在再次单击该按钮时更新当前补间的值:
private var _currentTween : Tween;
private function buttonClickedVersionA() : void {
if (_currentTween) _currentTween.stop(); // or whatever it is called
_currentTween = new Tween(...);
}
private function buttonClickedVersionB() : void {
if (!_currentTween) {
_currentTween = new Tween(...);
} else {
_currentTween.start = currentposx;
_currentTween.end = varx;
_currentTween.restart(); // or whatever
}
}