2010-09-01 36 views
0

我有這個類名爲MovingObject,它擴展了MovieClip類。這個課程將被多次實例化。這個類內部是一個Timer,它處理移動對象的速度。還有另一個名爲TheStage的類,這是我將實例化MovingObject(s)的地方。定時器在AS3中的對象

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; 
     } 
    } 
} 

假設代碼工作正常(我沒有調試它),這使得粒子一次全部移動。然而,在運行幾秒鐘後,粒子似乎不會彼此同步移動(因爲它們之間的距離似乎更近)。我需要一些幫助,使物體彼此移動距離彼此平衡。

+0

[Moving Timer with Timer]的可能重複(http://stackoverflow.com/questions/3614983/moving-objects-with-timer) – Gunslinger47 2010-09-01 08:50:36

回答

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爲什麼會不同步,現在他們應該一起移動。

+0

不,我沒有試過確切的代碼。是的,在那裏分配X和Y只會導致對象重疊。我的意思是在這些對象之間會有空格。關於從移動中啓動對象,我可以同時啓動tmr和觸發該功能。我忘了使用該功能。看起來在Flash中,當多個定時器同時工作時,對象不會均勻移動。 – Ranier 2010-09-01 04:53:32

+0

我知道現在該做什麼。有兩個解決方案。一種是在MovingObject中分配靜態定時器。當調用靜態定時器時,這會導致所有對象都受到影響。另一種解決方案是將定時器分配給TheStage類,而不是分配給MovingObject,以便只有一個定時器移動所有對象。 – Ranier 2010-09-01 05:01:31