воскресенье, 23 января 2011 г.

Урок 11.5 Боты

Скучно вот так просто летать… Нужно добавить экшена) Значит - делаем ботов.
Искусственный интеллект у нас будет простой – если игрок в видимости бота и время перезарядки вышло, то тогда стрелять. В общем, боты довольно тупые) Можете в этом убедиться:



Класс ботов похож на класс людей, а класс пули ботов на класс пули игрока, так что открываем класс man, жмём save as, в имя файла пишем bot. Код будет очень похож, и выкладывать его в урок я не буду. Всё как всегда в исходнике. И не забываем нарисовать это НЛО (называть bot, экспортировать …). Рисуем пулю, называем bot_bullet. Уже не говорю про экспортирование :) Код тоже похож, но он маленький, так что вот:
package {
 import flash.display.MovieClip;
 import flash.events.Event;
 import flash.geom.Point;
 public class bot_bullet extends MovieClip {

  private var speedX,speedY:Number;
  private var game;
  private var Speed:Number=15;
  private var radians:Number=Math.PI/180;
  private var speedRotation:Number;

  public function bot_bullet(Game, Parent) {
   game=Game;
   speedRotation=Math.random()*9+1;
   this.rotation=Parent.Rotation;
   var bulletAngle:Number=this.rotation*radians;
   speedX=Math.cos(bulletAngle)*Speed;
   speedY=Math.sin(bulletAngle)*Speed;
   
   this.x=Parent.x;
   this.y=Parent.y;
   
   this.addEventListener(Event.ENTER_FRAME,update_bullet);
   
   game.bot_bullets_container.addChildAt(this,0);
  }
  private function update_bullet(e:Event) {
   update_coordinats();
   check_hit();
   rotate();
  }
  private function rotate(){
   this.rotation+=speedRotation;
  }
  private function check_hit(){
   if(this.hitTestObject(game.Player.Marker)){
    //отнимаем жизни у игрока
    self_destruction();
   }
  }
  private function update_coordinats() {
   //проверка на вылет пули за пределы окна
   var point:Point=new Point(this.x,this.y);
   point=game.bot_bullets_container.localToGlobal(point);
   if ((point.x+this.width<game.stgWidth+30)&&(point.y+this.height<game.stgHeight+30)&&(point.x-this.width>0-30)&&(point.y-this.width>0-30)) {
    this.x+=speedX;
    this.y+=speedY;
   } else {
    self_destruction();
   }
  }
  public function self_destruction() {
   // иногда по неизвестной мне причине объект может удалить себя дважды и при этом возникнет ошибка
   //поэтому лучше себя застраховать
   try { 
    this.removeEventListener(Event.ENTER_FRAME,update_bullet);
    this.parent.removeChild(this); 
   } catch (Error) {

   }
  }
 }
} 
Надеюсь, Вы поймёте, что если бы я писал все изменения в урок, то это заняло бы страниц 10. В следующем уроке мы сделаем меню, а в следующем будут всякие доработки. Так что осталось всего 2 урока! Пойду праздновать свой день рождения (21 января). Как всегда исходник и до следующего поста!))

Комментариев нет:

Отправить комментарий