2011-04-12 13 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