0
votes

I have this class named MovingObject which extends the MovieClip class. This class will be instantianted for several times. Inside this class is a Timer that handles the speed of the objects moving. There is another class called TheStage and this is where I will instantiate MovingObject (s).

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

Assuming that the code is working fine (I haven't debugged it), this makes the particles to move all at once. However after several seconds of running it, the particles seem not to be moving in synchronization with each other (because their distances between seem to get nearer). I need some help to make the objects move with their distances each other evened out.

2
try to wrap your code in <pre> tags or indent it four spaces. it'll be easier to read!PatrickS
What's the benefit of using a timer? Why aren't you using the enterFrame event?Greg B

2 Answers

1
votes

With the code as is, you will only see one particle on stage, the following code doesn't offset your objects!

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.

You would need to do this

var objX:int;
var objY:int;

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

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

Then, why do you call this?

mcMoveObject.tmr.start();

when you could do this

mcMoveObject.StartMove();

Have you actually tried this code? I don't see why your MovingObjects would get out of sync, right now they should all move together.

0
votes

Here's is a great resource on particles:

http://sebleedelisle.com/2007/09/as3-particles-1000-extra-free/

I'd recommend taking a look at the code provided.