2012-08-09 41 views
0

我想要創建一組隨機對象以便在循環中落下舞臺。在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); 
} 
} 

回答

2

指我的一個落雪效果代碼。

雪的起始位置都是隨機的,幾乎和真正的落雪情況一樣的效果。如果你運行你會驚訝。

雪是我的自定義影片剪輯(白色圓形,寬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); 
    } 

} 
1

通過數組創建一個組對象,將它們添加到一個數組,然後循環:

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

上面的代碼只是用紅色圓圈 - 你將不得不使用你擁有的任何圖像相反(除非你喜歡紅色圓圈......)。