无法在 Flash 中创建多个对象(数组)

Trouble creating multiple objects (Arrays) in Flash

我正在 Flash 中制作一个基本的 Galaga 类型的游戏并且遇到了 运行 问题。这是我第一次真正搞乱 ActionScript。
我为我的敌人创建了一个阵列,我想知道我将如何让它们在各自的位置生成,比如在 Galaga 中,然后让它们从左到右均匀移动,同时在到达舞台边缘后下降。

游戏

package
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    public class SpaceVigilanteGame extends MovieClip

    {
        public var army:Array;
        public var avatar:Avatar;
        public var gameTimer:Timer;
        public var useMouseControl:Boolean; 
        public var rightKeyIsBeingPressed:Boolean;
        public var leftKeyIsBeingPressed:Boolean; 
        var gameWidth:int = 0;
        var gameHeight:int = 0;

        public function SpaceVigilanteGame()
        {   useMouseControl = false;
            leftKeyIsBeingPressed = false;
            rightKeyIsBeingPressed = false;
            army = new Array();
            var newEnemy = new Enemy( 60, 30 );
            army.push( newEnemy );
            addChild( newEnemy );
            avatar = new Avatar();
            addChild( avatar );

            if ( useMouseControl )
            {
                avatar.x = mouseX;
                avatar.y = mouseY;
            }
            else
            {
                avatar.x = 50;
                avatar.y = 400;
            }

            gameWidth = stage.stageWidth;
            gameHeight = stage.stageHeight;


            gameTimer = new Timer( 25 );
            gameTimer.addEventListener( TimerEvent.TIMER, moveEnemy );
            gameTimer.addEventListener( TimerEvent.TIMER, moveAvatar );
            gameTimer.start();
            stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyPress );
            stage.addEventListener( KeyboardEvent.KEY_UP, onKeyRelease );

        function onKeyPress( keyboardEvent:KeyboardEvent ):void
        {
            if ( keyboardEvent.keyCode == Keyboard.RIGHT )
            {
                rightKeyIsBeingPressed = true;
            }
            else if ( keyboardEvent.keyCode == Keyboard.LEFT ) 
            {
                leftKeyIsBeingPressed = true;
            }
        }
        function onKeyRelease( keyboardEvent:KeyboardEvent ):void
        {
            if ( keyboardEvent.keyCode == Keyboard.RIGHT )
            {
                rightKeyIsBeingPressed = false;
            }
            else if (keyboardEvent.keyCode ==Keyboard.LEFT )
            {
                leftKeyIsBeingPressed = false;
            }
        }
        }
        public function moveEnemy( timerEvent:TimerEvent ):void 
        {
            for each ( var enemy:Enemy in army ) 
            {

            }
            //enemy.moveDownABit();
            if(enemy.x+enemy.width+2<=gameWidth)
                {
                    enemy.moveRight();
                }
            else if(enemy.y+enemy.height+2<=gameHeight)
                {
                    enemy.moveDown();
                }
            else if(enemy.x-2>=0)
                {
                    enemy.moveLeft();
                }
            else if(enemy.y-2>=0)
                {
                    enemy.moveUp();
                }

        }
        public function moveAvatar( timerEvent:TimerEvent ):void
        {
            if ( useMouseControl )
            {
                avatar.x = mouseX;
                avatar.y = mouseY;
            }
            else if ( rightKeyIsBeingPressed )
                {
                    avatar.moveRight();
                }
            else if ( leftKeyIsBeingPressed )
                {
                    avatar.moveLeft();
                }
        }



    }
}

敌人Class

package 
{
    import flash.display.MovieClip;
    public class Enemy extends MovieClip 
    {
        public function Enemy( startX:Number, startY:Number ) 
        {
            x = startX;
            y = startY;
        }


        public function moveRight():void
        {
            x = x + 2;
        }

        public function moveDown():void
        {
            y = y + 2;
        }

        public function moveLeft():void
        {
            x = x - 2;
        }

        public function moveUp():void
        {
            y = y - 2;
        }
    }
}

我建议在敌人实例化过程中(似乎只有一个),你应该设置彼此的位置。

举个例子:

您的代码当前执行此操作:

var newEnemy = new Enemy( 60, 30 );
army.push( newEnemy );
addChild( newEnemy );

也许它应该这样做:

for(var x:int = 0; x< ARMY_WIDTH; x++)
{
    for(var y:int = 0; y < ARMY_HEIGHT; y++)
    {
        army.push(new Enemy(60 + x * X_GAP, 30 + y *Y_GAP));
        this.addChild(army[army.length-1]);
    }
}

现在,我在上面的代码中做了很多假设;我发明了你可能没有的常量,我只是解决了你眼前的问题。理想情况下,您需要针对您的问题寻找更高级的解决方案,例如工厂 class 为您制造敌人,或从敌人池中回收它们。

但是,您才刚刚起步,您会及时弄清楚其中的很多内容。祝你的项目好运,我希望你继续发展你的技能:)