| 
	
		
		
			| Помогите реализовать AI который стреляет |  |  |  | 
| Ltdima | Дата: Пятница, 13 Апреля 2012, 09:14 | Сообщение # 1 |  |   частый гость Сейчас нет на сайте | Пожалуйста,помогите реализовать AI, который стреляет при виде игрока  . Я делаю плаформер ,а когда начал делать этот тип врагов, возникла проблема, что если игрок будет видеть врагов,которые находятся платформой выше или ниже, то они все будут поворачиваться к игроку,а также стрелять.   |  |  |  |  |  | 
| AGDMFG | Дата: Пятница, 13 Апреля 2012, 10:58 | Сообщение # 2 |  |   участник Сейчас нет на сайте | CREATE врага 
 Code mirror=1 //чтобы не рисовать лишний спрайт "куда смотрит враг" - будем отражать исходный 
 STEP врага
 
 Code if distance_to_object(player) <= 100 //если между игроком и врагом расстояние меньше 100 пикселей {
 if self.x<player.x{mirror=-1;} else{mirror=1;} //поворачиваем бота в сторону игрока
 instance_create(x,y,bullet); //производим выстрел (можно добавить задержки времени и доп.условия)
 }
 DRAW врага
 
 Code draw_sprite_ext(sprite_index,image_single,x,y,mirror,1,image_angle,c_white,1);
 Проверку на видимость обьекта можно задать и с помощью: collision_line(x1, y1, x2, y2, obj, prec, notme)
 
 Подробнее
 
 Первая доделанная игра: Putin V.S. Humanity
 
 
 Сообщение отредактировал AGDMFG - Пятница, 13 Апреля 2012, 11:53 |  |  |  |  |  | 
| Ltdima | Дата: Пятница, 13 Апреля 2012, 11:49 | Сообщение # 3 |  |   частый гость Сейчас нет на сайте | Пожалуйста,можно поподробнее про проверку видимости? |  |  |  |  |  | 
| ress | Дата: Пятница, 13 Апреля 2012, 12:11 | Сообщение # 4 |  |   постоянный участник Сейчас нет на сайте | collision_line(x1, y1, x2, y2, obj, prec, notme) 
 Ну вроде:
 x1,y1 - координаты бота
 x2,y2 - координаты врага бота
 obj - объект, заграждающий врага
 
 Пишется примерно так:
 
 Code if not collision_line(x,y,враг.x,враг.y,стена,0,0) then ...
 Надеюсь я не ошибся. Что то давно этот оператор не использовался мной...
 
 Я очень недоволен...
 |  |  |  |  |  | 
| Ltdima | Дата: Пятница, 13 Апреля 2012, 20:12 | Сообщение # 5 |  |   частый гость Сейчас нет на сайте | Вроде все работает,но когда я попытался использовать alarm (чтобы он стрелял с интервалом) у меня он вообще перестал стрелять. Вот как я изменил код в step'е:
 if distance_to_object(Obj_Hero) <= 600
 {
 if self.x<Obj_Hero.x{mirror=-1;} else{mirror=1;}
 if not collision_line(x,y,Obj_Hero.x,Obj_Hero.y,Obj_block,0,0) then{
 event_perform(alarm,1)
 
 }
 
 }
 Добавлено (13.04.2012, 20:12)---------------------------------------------
 Пожалуйста,объясните как сделать так, чтобы ai стрелял с интервалом
 |  |  |  |  |  | 
| ress | Дата: Суббота, 14 Апреля 2012, 16:13 | Сообщение # 6 |  |   постоянный участник Сейчас нет на сайте | Ltdima, я точно не скажу как, ибо не знаю каков у тебя исходный код, но я обычно в событии Create устанавливаю Alarm и в этом самом аларме провожу все действия для выстрелов. 
 К примеру вот небольшой код:
 
 Create:
 
 
 Alarm 1:
 
 Code if (distance_to_object(игрок)<=100) and (not collision_line(x,y,игрок.x,игрокo.y,стена,0,0)) then begin instance_create(x,y,bullet)
 end;
 
 alarm[1]=10
 Я очень недоволен...
 |  |  |  |  |  
 |