Actionscript 3.0: Нужно ли прерывать предыдущую анимацию, если я запускаю новую с тем же видеоклипом? - PullRequest
1 голос
/ 05 августа 2011

У меня есть этот переход между подростками. При каждом нажатии кнопки X он перемещает видеоклип (прямоугольник) немного дальше (varx + numberx).

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

Каким-то образом, если я нажму кнопку X, через некоторое время мой компьютер начнет работать медленно. Но почему-то я не могу найти источник проблемы. Я предполагаю, что каждый раз, когда я отменяю переход между подростками, предыдущий все равно остается неизменным.

Так нужно ли прерывать анимацию, если она перезаписана другой?

1 Ответ

1 голос
/ 05 августа 2011

Использование вашей кнопки никогда не должно замедлять работу приложения. Так что что-то не так.

  • А) Это твой код
  • B) Свой код (Твин)

Так что же может произойти:

- 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 сек. тогда у нас одновременно работает 30 подростков.

В это время должна закончиться первая анимация, отмените регистрацию в любых событиях, отправляемых экранными объектами (введите кадр) или таймерами. По-видимому, это не так, и ваше приложение добавляет анимацию к анимации, а также не завершает работу.

Возможно, что ваша анимация проверяет расстояние между 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...