Объекты застряли на вершине сцены и не упадут - PullRequest
0 голосов
/ 12 апреля 2011

Я использую 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 ]

1 голос
/ 12 апреля 2011

Вы пытаетесь добавить скорость к 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);
}
0 голосов
/ 12 апреля 2011

Вы удаляете прослушиватель enterFrame, когда первая бомба падает снизу, и в этот момент вы больше не слушаете события ENTER_FRAME и не обновляете ни одну из ваших бомб.

Вы не хотитеУдалите этого слушателя, пока вы не закончите анимацию ВСЕХ бомб.

ОБНОВЛЕНИЕ: Как я мог бы ожидать, что все будет выглядеть, в ущерб наблюдению Этана о том, что вы должны использовать локальную бомбу 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);
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...