开发者

Objects stuck at top of stage and won't fall down

I am using math.random to randomly drop objects from the top of the stage. I had it working with one object. But as I wanted to increase the number to 6 objects, I added the following code: But I am "stuck" and so are the 6 objects at the top of the stage. What am I doing wrong here? I appreciate the help.

            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.ENT开发者_如何学CER_FRAME, onEntry);


You are trying to add the velocity to the RoachBomb rather than to the RoachBomb y position.

roachBombArray[i] += vy;

should be

roachBombArray[i].y += vy;

Additionally you create a local variable:

var roachBomb = roachBombArray[i];

but you never manipulate it. Perhaps you meant to do something like this?

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


You're removing your enterFrame listener when the first bomb goes off the bottom, at which point you're no longer listening for ENTER_FRAME events and updating any of your bombs.

You don't want to remove this listener until you're done animating ALL the bombs.

UPDATE: How I would expect things to look, incorperating Ethan's observation that you ought to use the local roachBomb that you declare...

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜