物体停留在舞台顶部,不会掉下来

时间:2011-04-12 02:48:57

标签: arrays actionscript-3 animation

我正在使用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);

2 个答案:

答案 0 :(得分:1)

您正在尝试将速度添加到RoachBomb而不是RoachBomb y位置。

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

答案 1 :(得分:0)

当第一枚炸弹从底部消失时你正在移除你的enterFrame监听器,此时你不再侦听ENTER_FRAME事件并更新你的任何炸弹。

在完成所有炸弹的动画制作之前,您不想删除此侦听器。

更新:我希望事情看起来如何,让Ethan观察到你应该使用你声明的当地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);
                }
            }
        }
    }
}