AS3中带有定时器的对象

时间:2010-09-01 04:30:43

标签: flash actionscript-3 timer

我有一个名为MovingObject的类,它扩展了MovieClip类。这个类将被多次实例化。在这个类中是一个Timer,它处理移动对象的速度。还有另一个名为TheStage的类,这是我将实例化MovingObject的地方。

public class MovingObject extends MovieClip{
     public var tmr:Timer = new Timer(1);
     public function MovingObject(){
         tmr.addEventListener(TimerEvent.TIMER, Move);
     }
     public function StartMove():void{
         this.tmr.start();
     }
     public function ChangeSpeed(delay:Number):void{
         this.tmr.delay = delay;
     }
     public function Move(evt:TimerEvent):void{
        // some codes to make this.x and this.y change
     }
}

public class TheStage extends MovieClip{
    public var objectArray:Array = [];
    public function TheStage(){
         var x:int =0;
         var mcMoveObject;
         while (x!=10){
              mcMoveObject = new MovingObject();
              mcMoveObject.x += 10;//offset between the objects
              mcMoveObject.y += 10;//offset between the objects
              this.addChild(mcMoveObject);
              objectArray.push(mcMoveObject);
              mcMoveObject.tmr.start();
              x++;
         }
    }
    public function ChangeSpeed(delay:Number):void{//some function to change speed
        for(var chilCnt:int =0;chilCnt<objectArray.length; chilCnt++){
            objectArray[chilCnt].timer.delay = delay;
        }
    }
}

假设代码工作正常(我没有调试它),这会使粒子一次性移动。然而,经过几秒钟的运行后,粒子似乎没有彼此同步移动(因为它们之间的距离似乎越来越近)。我需要一些帮助才能让物体随着距离的增加而移动。

1 个答案:

答案 0 :(得分:0)

使用代码,您只能在舞台上看到一个粒子,以下代码不会偏移您的对象!

mcMoveObject = new MovingObject(); 
mcMoveObject.x += 10;//offset between the objects 
mcMoveObject.y += 10;
//since you're instantiating a new MovingObject +=10 doesn't do what you expect
// it simply sets a value of 10 for x & y.

您需要这样做

var objX:int;
var objY:int;

while( x!=10 )
{
   objX +=10;
   objY +=10;

   mcMoveObject = new MovingObject(); 
   mcMoveObject.x = objX; 
   mcMoveObject.y = objY;
   //etc....

然后,你为什么这么称呼?

mcMoveObject.tmr.start();

何时可以这样做

mcMoveObject.StartMove();

你真的尝试过这段代码吗?我不明白为什么你的MovingObjects会不同步,现在他们应该一起移动。