Игра AS3 - Как порождать врагов с левой и правой стороны экрана? - PullRequest
3 голосов
/ 11 ноября 2011

Мой персонаж появляется в середине экрана, и я не уверен, как заставить зомби появляться с левой и правой стороны экрана и двигаться к середине. Моя цель - сделать так, чтобы зомби появлялись автоматически, а персонаж посередине мог их сбить. Я только начал работать над 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;
        }
    }

}

Ответы [ 3 ]

1 голос
/ 12 ноября 2011

Я понимаю твои проблемы, и я был там сам.Когда вы просто учитесь кодировать, пытаясь скопировать другой код и изменить его, и в конечном итоге выполнить свои цели, вы можете пропустить некоторые основные элементы, которые необходимо изучить позже.

Массив работает как стопка бумаги.Вы можете положить лист бумаги в него, вы можете один, или вы можете положить всю стопку на стол и поставить печать на всех из них, один за другим.Это то, что вы хотите сделать со своими зомби.(Образно говоря).

Вам также нужно будет изучить понятие петель.Используя циклы, вы можете манипулировать всеми объектами в массиве с очень небольшим количеством строк кода, даже если вы заранее не знаете, сколько элементов в вашем массиве.

Вы захотите сделать следующее:

  • Создайте массив, в котором будут содержаться ваши зомби.
  • Заполните ваш массив зомби.
  • Перебирайте зомби каждые кадры, приказывая им двигаться.

Создайте свой массив следующим образом: 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, но, надеюсь, он поможет вам немного дальше.Научитесь использовать массивы и циклы.

Удачи.

1 голос
/ 11 ноября 2011

Я обычно люблю разделять проблемы. Допустим, у вас были разные типы зомби, вы бы использовали другой метод для их создания и использовали этот метод для простого добавления их влево и вправо, независимо от того, какого типа они будут ...

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

   }
0 голосов
/ 11 ноября 2011

вместо:

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

Затем вы можете использовать функцию таймера, чтобы добавлять зомби на сцену один за другим.На данный момент я оставлю это вам, не хочу снимать все волнение;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...