Создание случайных падающих объектов в AS3

Я хочу создать набор случайных объектов, которые будут падать по сцене в цикле.

До сих пор я создал тестовый объект, который падает на случайную координату x. У меня возникли проблемы с тем, как зациклить функцию падения, чтобы несколько экземпляров объекта постоянно падали.

var randomX:Number = Math.random() * 800;

test_mc.x = randomX;
test_mc.y = 0;

var speed:Number = 10;

test_mc.addEventListener(Event.ENTER_FRAME, moveDown);

function moveDown(e:Event):void
{
 e.target.y += speed; 

 if(e.target.y >= 480)
 {
      test_mc.removeEventListener(Event.ENTER_FRAME, moveDown);
 }
}

person user1078385    schedule 09.08.2012    source источник


Ответы (2)


обратитесь к моему коду эффекта падающего снега.

Исходное положение снега является случайным, почти такой же эффект, что и реальный снегопад. Если вы побежите, вы будете поражены.

The Snow is My Custom MovieClip (форма белого круга, ширина 15, высота 15)

вот моя демонстрация: SnowEffect

вот мой источник: SnowEffect Down

this.addEventListener( Event.ENTER_FRAME, onEnter );

function onEnter( e: Event ):void {

    var s: Snow = new Snow();
    s.x=550*Math.random();
    s.y=-20;
    s.width=s.height=1+9*Math.random();// 1 ~ 9

    s.xSpeed=-2+4*Math.random();// -2 ~ 2
    s.ySpeed=1+4*Math.random();// 1 ~ 5

    s.at = -0.001 -0.001*Math.random();
    s.vt = 0;
    this.addChild( s );

    s.addEventListener( Event.ENTER_FRAME, onSnowEnter );
}

function onSnowEnter( e: Event ):void {
    var s:Snow=e.currentTarget as Snow;
    s.x+=s.xSpeed;
    s.y+=s.ySpeed;


    if (s.y>=480) {
        s.addEventListener( Event.ENTER_FRAME, onMeltingEnter );
    }
}

function onMeltingEnter( e: Event ): void {
    var s:Snow=e.currentTarget as Snow;
    this.addChild( s );
    s.removeEventListener( Event.ENTER_FRAME, onSnowEnter );
    s.vt += s.at;
    s.alpha += s.vt;
    if ( s.alpha <=0){
        s.removeEventListener( Event.ENTER_FRAME, onMeltingEnter );
        this.removeChild( s );
    }

}
person bitmapdata.com    schedule 09.08.2012

Создайте группу объектов, добавьте их в массив, а затем выполните цикл по массиву:

var numOfObjects:int = 10;
var fallingObjectArray:Array = [];
var speed:Number = 10;

// Add 10 falling objects to the display and to the array
for(var i:int = 0; i < numOfObjects; i++) {
   var fallingObject:Sprite = new Sprite();
   fallingObject.graphics.beginFill(0xFF0000);
   fallingObject.graphics.drawCircle(0, 0, 15);
   fallingObject.graphics.endFill();
   addChild(fallingObject);
   fallingObject.x = Math.random() * stage.stageWidth;
   fallingObjectArray.push(fallingObject);
}

addEventListener(Event.ENTER_FRAME, moveDown);

function moveDown(e:Event):void
{    
   // Go through all the objects in the array and move them down
   for each(var fallingObject in fallingObjectArray) {
      fallingObject.y += speed;
      // If the object is past the screen height, remove it from display and array
      if(fallingObject.y+fallingObject.height >= stage.stageHeight) {
         removeChild(fallingObject);
         fallingObjectArray.splice(fallingObjectArray.indexOf(fallingObject), 1);
      }
   }
   // Once all objects have fallen off the screen, remove the listener
   if(fallingObjectArray.length <= 0) {
      removeEventListener(Event.ENTER_FRAME, moveDown);
   }
}

В приведенном выше коде используются только красные круги — вам придется использовать любое изображение, которое у вас есть (если только вам не нравятся красные круги...).

person Pixel Elephant    schedule 09.08.2012