Суббота, 04 Апреля 2020, 05:30

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Ближайший объект
Ближайший объект
Quad69Дата: Среда, 04 Июня 2014, 22:18 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Всем привет!
Хочу найти решение своей проблеме:
Есть три объекта:
-obj_player
-obj_bot
-obj_wall

У игрока и у бота есть переменная team.
бот возвращает id ближайшего объекта obj_p_p (instance_nearest(x,y,obj_p_p))
(в obj_p_p нет ни одного скрипта. Это просто родительный объект для бота и игрока)
Проблема в том что бот идёт атаковать сам себя потому что функция instance_nearest возвращает его же id.
Если ставить instance_furthest то бот начинает атаковать самых далёких противников, в них также входят свои по команде.



Мне нужен скрипт который возвращает id врага у которого команда другая
LunarPixelДата: Среда, 04 Июня 2014, 22:25 | Сообщение # 2
старожил
Сейчас нет на сайте
Как один из вариантов. Сделай два новых объекта родителя для каждой из команд, например obj_p1_p и obj_p2_p, поставь им общего родителя obj_p_p (чтобы продолжал работать все скрипты, которые обращаются к obj_p_p). А через свой скрипт поиска ближайшего врага обращайся уже не к obj_p_p, а к родителю, соответствующему врагам.

Quad69Дата: Среда, 04 Июня 2014, 22:35 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
У меня имеется один объект obj_player и obj_bot
Но в комнате их может быть по 2-3 штуки.
У этих объектов есть переменная team.
Например в комнате два объекта obj_player и два obj_bot
У одного obj_bot и obj_player team=1
У остальных team=3 (Всего у меня есть 3 команды)
И как тогда?
LunarPixelДата: Среда, 04 Июня 2014, 22:48 | Сообщение # 4
старожил
Сейчас нет на сайте
Берешь объекты:
obj_p_p
obj_p1_p - с родителем obj_p_p
obj_p2_p - с родителем obj_p_p
obj_player - с родителем obj_p1_p
obj_bot - с родителем obj_p2_p

Следовательно, obj_player ищет врага через instance_nearest(x,y,obj_p2_p), а obj_bot ищет врага через instance_nearest(x,y,obj_p1_p).


Quad69Дата: Среда, 04 Июня 2014, 23:49 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Сделал так, но теперь объекты obj_bot атакают только игрока.
У игрока team=1 и у бота team=1, и при этом бот всеровно атакует игрока. Так не должно быть

Добавлено (04.06.2014, 23:49)
---------------------------------------------
Нашёл скрипт, но как я его не менял ничего не работает.

Код
if (instance_number(obj_player)+instance_number(obj_bot))=1 {exit;}

min1=1000000; //расстояние до ближайшего экземпляра. взято большое число, чтобы реальное найденное расстояние было меньше
targ=0;       //текущая цель. нужно обнулить перед выбором новой
with (obj_p_p)  //проверяемый объект

{
  if collision_line(x,y,other.x,other.y,obj_wall,0,0) {continue} //не рассматривать тех, кто за стеной
  if team!=other.team {continue}

  if distance_to_object(other) < min1    //если расстояние меньше минимума, значит этот экземпляр ближе
  {
   other.targ=id;                         //установка цели
   min1=distance_to_object(other);        //присвоение нового минимального расстояния до ближайшего объекта
  }
}

if targ=0 {exit;}
if collision_line(x,y,targ.x,targ.y,obj_wall,1,1) {targ=0;min1=1000000}
if targ=0 {exit;}

dir=set_angle(dir,point_direction(x,y,targ.x,targ.y),5)
if collision_line(x,y,targ.x,targ.y,obj_wall,1,1)
{
mp_potential_step_object(targ.x,targ.y,1,obj_wall)
}
aFriendДата: Четверг, 05 Июня 2014, 01:11 | Сообщение # 6
участник
Сейчас нет на сайте
Вот если разбираешься в скриптах и поймешь, что я сделал, то будет тебе счастье.
PS: из проекта тебе нужен лишь скрипт nearest_detector(enemy)

Добавлено (05.06.2014, 01:11)
---------------------------------------------
если будут вопросы, то пиши

Quad69Дата: Четверг, 05 Июня 2014, 10:28 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Спасибо! Эту проблему я решил.
Вот код:


Теперь появилась другая проблема.
Как сделать так что-бы враг нормально выходил из-за стены и не пытался стрелять через стену.
Писал вот такой код( (collision_line(x+lengthdir_x(18,dir+90),y+lengthdir_y(18,dir+90),targ.x,targ.y,obj_wall,0,0) && collision_line(x+lengthdir_x(18,dir+90),y+lengthdir_y(18,dir+90),targ.x,targ.y,obj_wall,0,0)) ), но ничего не работает
aFriendДата: Четверг, 05 Июня 2014, 21:10 | Сообщение # 8
участник
Сейчас нет на сайте
maksim1221232, я бы тебе помог, но у тебя какой-то странный код
Quad69Дата: Пятница, 06 Июня 2014, 00:09 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
Всё, проблема решена!
Спасибо за помощь!
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Ближайший объект
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2020 Рейтинг