2011-04-12 17 views
0

我正在使用math.random從舞臺頂部隨機放置物體。我曾與一個對象工作。但是,因爲我想增加6個對象的數量,我添加了下面的代碼:但是我被「卡住」了,舞臺頂部的6個對象也是如此。我在這裏做錯了什麼?我很感激幫助。對象卡在舞臺頂部,不會掉下來

  private function bombInit(): void { 
       roachBombArray = new Array(); 
     for (var i:uint =0; i < numBombs; i++) { 
       roachBomb= new RoachBomb(); 
        roachBomb.x = Math.random() * stage.stageWidth; 
        roachBomb.vy = Math.random() * 2 -1; 
        roachBomb.y = -10; 
        addChild(roachBomb); 
        roachBombArray.push(roachBomb); 
     } 

        addEventListener(Event.ENTER_FRAME, onEntry); 
       } 

       private function onEntry(event:Event):void { 
        for (var i:uint = 0; i< numBombs; i++) { 

       var roachBomb = roachBombArray[i]; 

       vy += ay; 
       roachBombArray[i] += vy; 


       if (roachBombArray[i] > 620) { 
       removeChild(roachBombArray[i]); 
       removeEventListener(Event.ENTER_FRAME, onEntry); 

回答

0

你當第一彈熄滅底部,這時你不再偵聽ENTER_FRAME事件和更新您的任何炸彈移除你的聽衆enterFrame事件。

您不想在完成所有炸彈動畫之前刪除此偵聽器。

更新:我怎麼會想到事情看,incorperating阮經天的觀察,你應該使用聲明當地roachBomb ...

public class BombDropper extends Sprite { 

    private static const GRAVITY:int = 1; // Set gravity to what you want in pixels/frame^2 
    private static const BOTTOM_OF_SCREEN:int = 620; 
    private var numBombs:int = 6; 
    private var roachBombArray:Array; 

    // ... constructor and other class stuff here 

    private function bombInit(): void 
    { 
     roachBombArray = new Array(); 

     for (var i:int =0; i < numBombs; ++i) 
     { 
      var roachBomb:RoachBomb = new RoachBomb(); 
      roachBomb.x = Math.random() * stage.stageWidth; 
      roachBomb.vy = Math.random() * 2 -1; 
      roachBomb.y = -10; 
      this.addChild(roachBomb); 
      roachBombArray.push(roachBomb); 
     } 

     this.addEventListener(Event.ENTER_FRAME, onEntry); 
    } 

    private function onEntry(event:Event):void 
    { 
     for each (var roachBomb:RoachBomb in roachBombArray) 
     { 
      roachBomb.vy += GRAVITY; 
      roachBomb.y += vy; 

      if (roachBomb.y > BOTTOM_OF_SCREEN) 
      { 
       this.removeChild(roachBomb); 
       roachBombArray.splice(roachBombArray.indexOf(roachBomb),1); 
       if (roachBombArray.length == 0) 
       { 
        this.removeEventListener(Event.ENTER_FRAME, onEntry); 
       } 
      } 
     } 
    } 
} 
+0

哦,我真傻!我刪除了,但現在我有一個1034不能轉換。我現在會研究這個錯誤....謝謝你,亞當。 – londonbird 2011-04-12 03:04:10

+0

您可能還需要removeChild(roachBombArray [i]作爲DisplayObject);數組沒有輸入,所以編譯器不知道roachBombArray [i]是什麼。 – 2011-04-12 03:06:44

+0

好的,我做到了。我也做了removeChild(roachBombArray [i] .roachBomb),這兩個結果都讓我獲得了同樣的結果......這些炸彈仍然停留在舞臺的頂部,不會讓步。大聲笑 – londonbird 2011-04-12 03:24:34

1

您正試圖將速度加入到RoachBomb而不是到RoachBomb的位置。

roachBombArray[i] += vy; 

應該

roachBombArray[i].y += vy; 

此外,您創建一個局部變量:

var roachBomb = roachBombArray[i]; 

,但你絕對不會操縱它。 也許你打算做這樣的事情?

var roachBomb:RoachBomb = roachBombArray[i]; // I added the type to the local variable 
roachBomb.vy += ay; 
roachBomb.y += vy; // Manipulate the local variable 
if (roachBomb.y > 620) { 
removeChild(roachBomb); 
} 
+0

roachBombArray [i] + = vy;呃,是的,那也是一個問題:-) – 2011-04-12 03:18:46

+0

它也應該是roachBomb.vy + = ay;我敢肯定,目的不是要讓所有的炸彈獲得每幀增加numBombs次的炸彈。唉,這是共同的一切都有道理,雖然(重力是不斷的和所有)。 – 2011-04-12 03:21:48

+0

啊,是的。感謝Adam,我已經用你的修正更新了我的答案。 – 2011-04-12 03:41:46