Как бы я исправил этот глюк в моей (TweenMax) анимации? - PullRequest
0 голосов
/ 27 апреля 2011

Я получил этот глупый сбой в линейной анимации, когда птицы летают слева направо (то есть иногда они замерзают).

Live: http://tli -temp.heroku.com /
Код:

package tli {

  import flash.events.TimerEvent;
  import flash.utils.Timer;
  import com.greensock.TweenMax;
  import com.greensock.easing.Linear;

public class Birds {

    private var birds:Array;

    public function Birds():void {
      birds = TLI.birds as Array;
      var i:uint = 4;
      while (i > 0) { new_bird(i); --i; }
    }

    private function new_bird(nr:uint):void {
      var b:Bird = new Bird();
      b.name = 'Bird nr.' + nr;
      b.scaleX = 0.23;
      b.scaleY = 0.23;
      b.x = -100;

      TLI.stage.addChild(b);

      birds.push(b);

      setTimeout(function():void {  tween_bird( birds[0] ); birds.shift()  }, rndm(5500, 500));
    }

    private function tween_bird(bird:Bird):void {
      bird.x = -100;
      bird.y = rndm(TLI.stage.stageHeight - TLI.sea.height - 80, 50);

      TweenMax.to( bird, rndm(55,35), {
        x: TLI.stage.stageWidth + 100, ease: Linear.easeNone,
        onComplete: tween_bird, onCompleteParams: [bird]
      });
    }

    private function rndm(max:uint, min:uint=0):uint {  return Math.floor( Math.random() * (max-min) ) + min }
}}

Кто-нибудь понял, как я мог это исправить?

1 Ответ

0 голосов
/ 27 апреля 2011

This:

 var t:Timer = new Timer(wait_time, 1);

Создает таймер в области действия функции.Когда функция выходит из области видимости, таймер становится кандидатом на сборку мусора.Возможно, таймер собран мусором, и событие complete никогда не срабатывает.

Вызов setTimeout () безопасен и, вероятно, делает то, что вам нужно.

Не уверен, что это проблемавидя, но это проблема, которую вы, вероятно, хотите решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...