2013-10-08 22 views
0

我是一名Web設計專業的學生,​​他在課堂上輕輕觸碰Actionscript,我的作業有些問題。這個任務是使用一個符號創建10個氣球,並使它們以不同的速度上升到屏幕的頂部,並停止僅使用AS(無時間軸動畫的東西)。Beginner Actionscript/Flash - 一個符號的多個實例,速度

我想我幾乎擁有它,但我不確定爲什麼我不能改變每個氣球的速度。他們都一起興起。有什麼我不正確的做法?

import flash.display.MovieClip; 
    import flash.events.Event; 

var Cball:MovieClip = new rainbow(); 
Cball.x = 400; 
Cball.y = 575; 
addChild(Cball); 



var Cball1:MovieClip = new rainbow(); 
Cball1.x = 200; 
Cball1.y = 575; 
addChild(Cball1); 

var Cball2:MovieClip = new rainbow(); 
Cball2.x = 385; 
Cball2.y = 575; 
addChild(Cball2); 

var Cball3:MovieClip = new rainbow(); 
Cball3.x = 500; 
Cball3.y = 575; 
addChild(Cball3); 

var Cball4:MovieClip = new rainbow(); 
Cball4.x = 600; 
Cball4.y = 575; 
addChild(Cball4); 

var Cball5:MovieClip = new rainbow(); 
Cball5.x = 405; 
Cball5.y = 575; 
addChild(Cball5); 

var Cball6:MovieClip = new rainbow(); 
Cball6.x = 333; 
Cball6.y = 575; 
addChild(Cball6); 

var Cball7:MovieClip = new rainbow(); 
Cball7.x = 250; 
Cball7.y = 575; 
addChild(Cball7); 

var Cball8:MovieClip = new rainbow(); 
Cball8.x = 100; 
Cball8.y = 575; 
addChild(Cball8); 

var Cball9:MovieClip = new rainbow(); 
Cball9.x = 700; 
Cball9.y = 575; 
addChild(Cball9); 


var xVel:Number = 0; 
var yVel:Number = -5; 



addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true); 

function onLoop(evt:Event):void { 


// THis is for balloon number A ******************** 
Cball.x += xVel; 
Cball.y += yVel; 
// Check for collisions on every frame 
if (Cball.y >= 575) { 
    yVel = -5; 
}// end if 
if (Cball.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number A script ****************** 


// THis is for balloon number 1 ******************** 
Cball1.x += xVel; 
Cball1.y += yVel; 
// Check for collisions on every frame 
if (Cball1.y >= 575) { 
    yVel = -5; 
}// end if 
if (Cball1.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number 1 script ****************** 


    // THis is for balloon number 2 ******************** 
Cball2.x += xVel; 
Cball2.y += yVel; 
// Check for collisions on every frame 
if (Cball2.y >= 550) { 
    yVel = -5; 
}// end if 
if (Cball2.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number 2 script ****************** 

    // THis is for balloon number 3 ******************** 
Cball3.x += xVel; 
Cball3.y += yVel; 
// Check for collisions on every frame 
if (Cball3.y >= 550) { 
    yVel = -5; 
}// end if 
if (Cball3.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number 3 script ****************** 

    // THis is for balloon number 4 ******************** 
Cball4.x += xVel; 
Cball4.y += yVel; 
// Check for collisions on every frame 
if (Cball4.y >= 550) { 
    yVel = -5; 
}// end if 
if (Cball4.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number 4 script ****************** 

    // THis is for balloon number 5 ******************** 
Cball5.x += xVel; 
Cball5.y += yVel; 
// Check for collisions on every frame 
if (Cball5.y >= 550) { 
    yVel = -5; 
}// end if 
if (Cball5.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number 5 script ****************** 

    // THis is for balloon number 6 ******************** 
Cball6.x += xVel; 
Cball6.y += yVel; 
// Check for collisions on every frame 
if (Cball6.y >= 550) { 
    yVel = -5; 
}// end if 
if (Cball6.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number 6 script ****************** 

    // THis is for balloon number 7 ******************** 
Cball7.x += xVel; 
Cball7.y += yVel; 
// Check for collisions on every frame 
if (Cball7.y >= 550) { 
    yVel = -5; 
}// end if 
if (Cball7.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number 7 script ****************** 

    // THis is for balloon number 8 ******************** 
Cball8.x += xVel; 
Cball8.y += yVel; 
// Check for collisions on every frame 
if (Cball8.y >= 550) { 
    yVel = -5; 
}// end if 
if (Cball8.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number 8 script ****************** 

    // THis is for balloon number 9 ******************** 
Cball9.x += xVel; 
Cball9.y += yVel; 
// Check for collisions on every frame 
if (Cball9.y >= 550) { 
    yVel = -5; 
}// end if 
if (Cball9.y <= 25) { 
    yVel = 0; 
} // end if 
// End of balloon number 9 script ****************** 
} // end onloop function 

回答

1

您已經爲每個球設置了相同的yVel,所以球會以相同的速度上升。

所以嘗試設置不同的yVel球。

var ySpeeds:Array = [-10,-9, -8, -7, -6, -5,-4,-3,-2,-1]; 

var save:Array = ySpeeds.concat();//save the speed 

for (var i:int = 1; i <= 10; i++) { 

    var ball:MovieClip = this['Cball' + i] as MovieClip;//get the target ball 

    ball.x += xVel; 
    ball.y += ySpeeds[i - 1];//set position 

    if (ball.y >= 550) { 
     ySpeeds[i - 1] = save[i - 1];//reset the speed 
    } else if (ball.y <= 25) { 
    ySpeeds[i - 1] = 0; 
    } 
} 
0

轉到您所做的氣球象徵和造就了它的動作,然後添加這是第一幀。

var yVel:Number = 0.0; 

下一個代碼用於您的主時間軸。 這段代碼應該幾乎完全符合你的要求,只是沒有所有的輸入。相反,創建每個對象的預運行時我動態創建它們,並將它們存儲在數組中。(爲了進一步的說明看到這個帖子的底部。)

import flash.display.MovieClip; 
import flash.events.Event; 

var xPosition:Number = 10.0; 
var balloons:Array = new Array(); 
var numBalloons:int = 10; 

for(var index:int = 0; index < numBalloons; index++) { 
    var cBall:MovieClip = new rainbow(); 

    cBall.x = xPosition; 
    cBall.y = 400; // <- [Insert Window Height Here] - [The Radius of the Movie Clip] 

    cBall.yVel = (1 + (Math.random() * (10 - 1)); // Min + Math.random() * (Max - Min) 
                // Gives you a velocity (1 U 10) 

    balloons.push(addChild(cBall)); // Your adding a new balloon to the array and 
            // adding it to the stage at the same time 

    xPosition += 10; // <- [Insert the Diameter of One Balloon here] and maybe 
           // some buffer space 

} 

addEventListener(Event.ENTER_FRAME, onEnterFrame); 

function onEnterFrame(e:Event):void { 

    for(var index:int = 0; index < numBalloons; index++) { 
     if(balloons[index].y > 0) { 
      balloons[index].y += yVel; // Update each balloons y position each frame 
     } 
    } 

} 

我覺得更容易使用類,而不是時間軸代碼但是這個代碼應該工作。如果你使用類或時間線進行編碼,它仍然被「編譯」爲「.swf」。在大多數情況下,動態創建對象比逐一創建對象要容易得多。同樣在你的問題中,你會說:「......讓他們上升到屏幕頂部不同的速度 ......」但在你的代碼中他們都以相同的速度,所以在我的代碼中,我只是分配每個氣球一個隨機yVel。如果您有任何問題,或者代碼無法正常工作,請告訴我,但我現在在實驗室,但沒有使用Flash,因此可能需要一些時間才能找到您。

頂部的進一步解釋:
而不必鍵入下面的代碼十倍,

var Cball1:MovieClip = new rainbow(); 
Cball1.x = 200; 
Cball1.y = 575; 
addChild(Cball1); 

我只是用這個代碼

for(var index:int = 0; index < numBalloons; index++) { 
    var cBall:MovieClip = new rainbow(); 

    cBall.x = xPosition; 
    cBall.y = 400; // <- [Insert Window Height Here] - [The Radius of the Movie Clip] 

    cBall.yVel = (1 + (Math.random() * (10 - 1)); // Min + Math.random() * (Max - Min) 
                // Gives you a velocity (1 U 10) 

    balloons.push(addChild(cBall)); // Your adding a new balloon to the array and 
            // adding it to the stage at the same time 

    xPosition += 10; // <- [Insert the Diameter of One Balloon here] and maybe 
           // some buffer space 

}