我如何修复我的(TweenMax)补间中的这个故障?

时间:2011-04-27 12:32:33

标签: flash actionscript-3

当鸟儿从左向右飞行时(即有时它们会冻结),我在线性补间中得到了这个愚蠢的故障。

直播: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 :(得分:0)

此:

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

在函数范围内创建一个计时器。当函数超出范围时,计时器将成为垃圾收集的候选者。计时器可能是垃圾收集的,完整的事件永远不会触发。

setTimeout()调用是安全的,可能就是你所需要的。

不确定这是否是您所看到的问题,但这可能是您可能想要解决的问题。