AS3游戏-如何从屏幕的左侧和右侧生成敌人



我的角色是在屏幕中间生成的,我不知道如何让僵尸从屏幕的左边和右边生成,并向中间移动。我的目标是让僵尸自动生成,而中间的角色能够将它们击落。我刚刚开始在AS3上工作,但我知道我需要做一个数组来做到这一点,但不确定如何实现这一点。谁能告诉我?谢谢。下面是我的代码:

package 
{
    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.KeyboardEvent;
    import flash.events.Event;
    import flash.ui.Keyboard;
    public class ActualGame extends MovieClip
    {
        public var char:Character;
        public var zombie:Zombieclass;
        public var timer:Timer;
        private var speed:Number = 4;
        private var moveleft:Boolean = false;
        private var moveright:Boolean = false;
        private var i:Number =0;
        public function ActualGame()
        {
            char = new Character();
            stage.addChild(char);
            zombie = new Zombieclass(0,360);
            addChild(zombie);
            timer = new Timer(25);
            timer.addEventListener(TimerEvent.TIMER, zombie_spawn);
            stage.addEventListener(Event.ENTER_FRAME, enterframe);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyup);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown);
            timer.start();
        }
        public function zombie_spawn(timerEvent:TimerEvent):void
        {
            zombie.zombie_move_right();
            if (char.hitTestObject(zombie))
            {
                timer.stop();
                trace("hit");
            }
        }
        public function enterframe(event:Event)
        {
            if (moveleft)
            {
                char.x -=  speed;
                char.scaleX = -1;
            }
            else if (moveright)
            {
                char.x +=  speed;
                char.scaleX = 1;
            }
        }
        public function keydown(event:KeyboardEvent)
        {
            switch ( event.keyCode )
            {
                case Keyboard.LEFT :
                    moveleft = true;
                    break;
                case Keyboard.RIGHT :
                    moveright = true;
                    break;
            }
        }
        public function keyup(event:KeyboardEvent)
        {
            switch ( event.keyCode )
            {
                case Keyboard.LEFT :
                    moveleft = false;
                    break;
                case Keyboard.RIGHT :
                    moveright = false;
                    break;
            }
        }
    }
}

Zombieclass:

package 
{
    import flash.display.MovieClip;
    public class Zombieclass extends MovieClip
    {
        public function Zombieclass(xcoord:Number, ycoord:Number)
        {
            x = xcoord;
            y = ycoord;
        }
        public function zombie_move_right():void
        {
            x +=  1.5;
        }
        public function zombie_move_left():void
        {
            x -=  1.5;
        }
    }
}

我理解你的问题,我也有过这样的经历。当你只是通过尝试、复制和修改其他代码来学习编程,并最终完成你的目标时,你可能会错过一些以后需要学习的要点。

Array的工作原理有点像一叠纸。你可以把一张纸放进去,也可以把一张纸拿出来,或者你可以把一整摞纸放在桌子上,然后一张一张地在上面盖上邮票。这就是你想对僵尸做的事。(打个比方来说)。

你还需要学习循环的概念。使用循环,你可以用很少的代码行操作数组中的所有对象,即使你事先不知道数组中有多少项。

你要做的是:

  • 创建一个数组来保存僵尸。
  • 用僵尸填充你的数组
  • 每帧循环你的僵尸,告诉他们移动。

像这样创建数组:public var zombies:Array = new Array();

添加一些僵尸:

var numberOfZombies:uint = 10;
for(var i:uint = 0; i<numberOfZombies; ++i) {
   var zombie:ZombieClass = new ZombieClass(0, (360/numberOfZombies)*i);
   addChild(zombie);
   zombies.push( zombie );
}

这将创建10个僵尸,将它们放在屏幕上,并将它们添加到数组中。

然后,在每一帧中,你可以循环遍历数组并移动僵尸:

for(var i:uint = 0; i<numberOfZombies; ++i) {
    var zombie:ZombieClass = zombies[i];
    zombie.zombie_move_right();
}

什么的。这段代码可能包含一些错误,因为它没有经过测试,而且我是在iPad上编写的,但希望它能进一步帮助你。学习使用数组和循环。

好运。

我通常喜欢将关注点分开。假设你有各种类型的僵尸,然后你会使用另一种方法来创建它们,并使用这种方法简单地将它们添加到左侧&对,与它们是什么类型无关…

   private function addZombie( zombie:Zombie ):void
   {
          //Get a random number
          var random:Number = ( Math.random() * 100 ) % 2;
          //If the number is even , place the zombie on the right
          if( random == 0 )
          {
              //add the zombie outside the stage
              zombie.x == stage.stageWidth + 10;
              zombie.moveLeft();
          }else { //otherwise , place it on the left
               //add the zombie outside the stage
               zombie.x = -10;
               zombie.moveRight();
          }
          addChild( zombie );
   }

代替:

public var zombie:Zombieclass;

你会得到这样的内容:

public var zombies:Array;

public var zombies:Vector.<Zombieclass>;

而不是:

zombie = new Zombieclass(0,360); 

你会有这样的东西:

zombies = new Array(20); //20 Zombies
for(var x:Number = 0; x < zombies.length; x++) {
    zombies[x] = new ZombieClass(someVar:Number, 360);
}

然后你可以使用计时器功能将僵尸一个接一个地添加到阶段。在这一点上,我将留给你,不想带走所有的兴奋;)

最新更新