2011-04-04 135 views
0

我想要做一個AS3春程序,效果是這樣的: link閃光AS3物理學春天問題

經過一番研究,看看一些例子,我的計劃是在這裏:

public class testing_2 extends MovieClip 
{ 
    //--------------declare variables 
    private var xdif:Number; 
    private var ydif:Number; 
    private var xvel:Number = 0; 
    private var yvel:Number = 0; 

    private var totalNum:Number = 3; 
    private var d:Number = 20; 
    private var springArray:Array = []; 

    public function testing_2() 
    { 
     //-------------init stuffs 
     init_mc(); 
     init_event(); 
    } 

    private function init_mc() 
    { 
     for (var i:Number = 0; i < totalNum; i++) 
     { 
      var mc:MovieClip = new box() ; 
      mc.num = i; 
      springArray.push(mc); 
      addChild(mc); 
      //mc.x = stage.stageWidth/2; 
      //mc.y = stage.stageHeight/2 + i*d; 
     } 
    } 

    private function init_event() 
    { 
     this.addEventListener(Event.ENTER_FRAME, spring); 
    } 

    //-------------own functions 
    function spring(e) 
    { 
    for (var i:Number = totalNum-1; i >= 0; i--){ 

     xdif = mouseX - springArray[i].x; 
     ydif = mouseY - springArray[i].y; 


     xvel += xdif * (0.4); 
     yvel += ydif * (0.4); 


     xvel *= (0.8); 
     yvel *= (0.8); 


     springArray[i].x += xvel ; 
     springArray[i].y += yvel ; 

     } 
    } 

這不是一個成功的程序,因爲球不能以一定的距離分離,並且當球滾動時,它們處於相同的循環路徑中,並且不能達到網站鏈接的效果。我認爲這是xdif = mouseX - springArray[i].x; ydif = mouseY - springArray[i].y;的問題,但我實際上不能指出問題所在。

任何人都可以幫忙嗎?非常感謝。

回答

1

在你的代碼中,每個ball都有相同的行爲,因爲for循環中兩次迭代之間沒有變化。你應該嘗試的地方,第一個球指的是鼠標,第二個球到第一個,第三個到第二個...

for (var i:Number = 0; i < totalNum; i++){ 
    if (i == 0) 
    { 
     xdif = mouseX - springArray[i].x; 
     ydif = mouseY - springArray[i].y; 
    } else 
    { 
     xdif = springArray[i-1].x - springArray[i].x; 
     ydif = springArray[i-1].y - springArray[i].y; 
    } 

    ...