Перемещение объектов с помощью таймера - PullRequest
0 голосов
/ 01 сентября 2010

У меня есть этот класс с именем MovingObject, который расширяет класс MovieClip.Этот класс будет инстанцирован несколько раз.Внутри этого класса есть Таймер, который управляет скоростью перемещения объектов.Есть еще один класс, называемый TheStage, и именно здесь я буду создавать экземпляры 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

Если предположить, что код работает нормально (я его не отлаживал), это заставляет частицы двигаться все сразу.Однако после нескольких секунд работы частицы, по-видимому, не движутся синхронно друг с другом (потому что их расстояния, кажется, становятся ближе).Мне нужна помощь, чтобы объекты двигались на одинаковом расстоянии друг от друга.

Ответы [ 2 ]

1 голос
/ 01 сентября 2010

С кодом, как есть, вы увидите только одну частицу на сцене, следующий код не смещает ваши объекты!

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 голосов
/ 01 сентября 2010

Вот большой ресурс по частицам:

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

Я бы рекомендовал взглянуть на предоставленный код.

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