Actionscript 3.0:如果我使用相同的Movieclip开始一个新的补间,我是否必须中止之前的补间?

时间:2011-08-05 07:06:24

标签: flash actionscript-3

我有这个补间转换。每次单击按钮X,它会进一步移动动画片段(矩形)(varx + numberx)。

var myTween:Tween = new Tween(rectangle, "x", Strong.easeOut, currentposx, varx, 3, true);

不知怎的,如果我垃圾邮件按钮X,我的电脑会在一段时间后变慢。但不知怎的,我找不到问题的根源。我的猜测是,每当我覆盖补间转换时,先前的转换仍然保持不变。

如果补间被另一个覆盖,我必须中止补间吗?

1 个答案:

答案 0 :(得分:1)

使用按钮永远不会减慢应用程序的速度。所以有些不对劲。

  • A)你的代码
  • B)它们的代码(Tween)

那会发生什么:

- 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同时运行。

此时第一个补间应该结束,从显示对象(输入框架)或计时器调度的任何事件中取消注册。显然它没有,你的应用程序通过补间添加补间,也没有完成。

可能是您的补间检查currentposxvarx之间的距离,并且只有两者相等时,补间才会停止。由于现在有并发补间,这种情况可能永远不会发生,并且您的补间继续尝试一次又一次地移动您的显示对象。

如果您要显示完整的运行代码,我可以在分析器中测试它。

-

无论如何,您应该将当前补间存储在持久变量(例如_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
    }
}