Пятница, 19 Апреля 2024, 20:49

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Движение (Движение врага с использованием Paths)
Движение
InsomniaДата: Вторник, 03 Декабря 2013, 20:49 | Сообщение # 1
был не раз
Сейчас нет на сайте
Всем доброго времени суток!
Прошу помочь новичку, уже долгое время пытаюсь решить задачу(но кроме ошибок ни чего не выходило) - Враг движется по траектории заданным Paths, и если видит героя ( длина обзора 250 пикселей), то движется на него, если враг теряет героя из обзора, то доходит до той точки в которой его последний раз видел и через две секунды Внимание! возвращается в ту точку с которой он сошел , когда увидел героя, и продолжил патрулирование (путь Paths). вот исходник http://yadi.sk/d/IOhGi7cuDiTid

Добавлено (03.12.2013, 20:46)
---------------------------------------------
Мне кажется помощь уровня профи нужна

Добавлено (03.12.2013, 20:49)
---------------------------------------------
у меня враг просто движется по траектории, когда видит героя рисует линию до него, как заставить его нападать на героя и возвращаться на путь патрулирования?

Сообщение отредактировал Insomnia - Вторник, 03 Декабря 2013, 16:02
parlДата: Среда, 04 Декабря 2013, 14:07 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Честно говоря не понял код. Точно могу сказать, что совершенно не оптимизирован.distance_to_object в степе-очень большая нагрузка.

Цитата Insomnia ()
у меня враг просто движется по траектории, когда видит героя рисует линию до него, как заставить его нападать на героя и возвращаться на путь патрулирования?


В аларме ты задал врагу путь, а при обнаружение врага используешь mp_potential_step. По пути он продолжает двигатся. Нужно остановить этот путь, а потом либо новый задавать, либо mp_potential_step использовать.

Как по мне переписывать код врага полностью нужно.


Make me fat

Сообщение отредактировал parl - Среда, 04 Декабря 2013, 14:08
InsomniaДата: Среда, 04 Декабря 2013, 15:41 | Сообщение # 3
был не раз
Сейчас нет на сайте
parl, mp_potential_step - написан, но не задействован, я его использовал для преследования за героем, когда еще не было Paths, сейчас его отключил, в теории я знаю что нужно отключать Путь, сохранять точку с которой он начал преследование(потом используем ее для возврата, ну это я смогу), затем включать преследование, герой выходит из зоны видимости, отключается mp_potential_step, возвращается на точку и как продолжить путь патрулирование врага (т.е вкл Paths)?
parlДата: Среда, 04 Декабря 2013, 18:09 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Вообщем вот как можно сделать.

Нужно сохранить не только координаты точки с которой начато преследование, но и path_position.
Если вернуться в данную точку и снова запустить первоначальный путь, то путь начнётся с его нулевого положения, что нас не устраивает.
Но если перед его запуском мы пропишем path_position=(сохранённое значение), то путь начнётся с необходимой нам позиции.

Надеюсь понятно объяснил. Попробовал это реализовать, получилось с большими погрешностями. Если убирать с пути много раз - большое искажение. А если убрать с пути когда пройдено больше половины - вообще не работает.
Лкм- убрать с пути
Пкм-вернуть на путь

http://zalil.ru/34837586


Make me fat
InsomniaДата: Пятница, 06 Декабря 2013, 00:01 | Сообщение # 5
был не раз
Сейчас нет на сайте
parl спасибо, доступно объясняешь, помоги с возвращением на путь разобраться и чтоб враг поворачивался в сторону героя, у меня все вроде правильно написано, но не работает. как увидит меня неадекватно себя начинает себя вести
Вот ссылка - http://yadi.sk/d/IOhGi7cuDiTid

Твой файл не могу открыть, разрешение gm81 не знаю

Добавлено (05.12.2013, 23:43)
---------------------------------------------
с адекватностью разобрался, go = true стояло, теперь только нужно в нужную сторону его поворачивать и и возвращать с места с которого он начал преследование

Добавлено (06.12.2013, 00:01)
---------------------------------------------
с поворотами разобрался, вот исходник - http://yadi.sk/d/hm_gexCyDr2HX
а как применить path_position?

Сообщение отредактировал Insomnia - Четверг, 05 Декабря 2013, 23:34
parlДата: Пятница, 06 Декабря 2013, 15:14 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Разобрался с возвращением.
Не работаю с ГМ 8, поэтому версия у меня какая-то корявая и проэкт криво сохраняется.
Вот код
Create
Код

//put_death=path_start(put,3,1,1)

//put_death=true

mode=mode_base
mode_change=false

x_put=656
y_put=128

povorot_death=1
radius=200

xx=o_mag.x
yy=o_mag.y

go=false

atk=true//используется при сохранение точки возврата
ppt=0//для хранения позиции пути
vosvrat=false//для ограничения. не начинает занова нападать при возврате

Step
Код
depth=-y

if (distance_to_object(o_mag)<radius) and mode=mode_base and vosvrat=true   {mode=mode_attack}// vosvrat=true - не начинает занова нападать при возврате
if (distance_to_object(o_mag)<radius) and mode=mode_walt   {ppt=path_position//сохранение позиции пути
vosvrat=false//запрет на нападение до возврата
path_end(); mode=mode_attack}
if (distance_to_object(o_mag)>radius) and mode=mode_attack {mode=mode_base}

switch(mode)
   {    
      case mode_walt:
      {
          if (mode_change) {
          vosvrat=true
          x=656//после достижение точки перемещение в точку начала пути
          y=128
          path_start(put,1,1,false);   
         path_position=ppt//перемещение на нужное нам положение пути
          mode_change=false}
          break;
      }
         
      case mode_attack:
      {  if atk=true{
      x_put=x
      y_put=y}//сохранение точек возврата
        
           if (x<o_mag.x) povorot_death=-1
           else povorot_death=1     
        
           go=true
          if (x>o_mag.x-5 && x<o_mag.x+5) // ��� �� �� ����� ������ �����, � ����� �� ���� � �����������
          if (y>o_mag.y-5 && y<o_mag.y+5)
          go=false
            
          atk=false//для того чтобы точки сохранились один раз
                           
          break;
      }     
      case mode_base:
        
      {   atk=true
      go=false   
         if x>656 povorot_death=1
              else povorot_death=-1
         if (x!=x_put and y!=y_put) mp_potential_step(x_put,y_put,1,true)
         else
         mode=mode_walt
         mode_change=true
         break;
      }
   }     
          if go=true mp_potential_step(o_mag.x,o_mag.y,2,true)


Make me fat

Сообщение отредактировал parl - Пятница, 06 Декабря 2013, 15:15
InsomniaДата: Суббота, 07 Декабря 2013, 11:35 | Сообщение # 7
был не раз
Сейчас нет на сайте
parl Спасибо!, работает идеально! Убрал условие чтоб при возврате тоже включался режим атаки и криво начало работать, враг начал телепортироваться, скажи с чем это связанно?
parlДата: Суббота, 07 Декабря 2013, 12:55 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Точка возврата сохраняется при работе mod_attack. mode_base доводит до этой точки. Mode_walt переносит в начало пути, а затем переносит в нужное положение на пути, он от точки возврата не зависит. Каждый раз при активации атаки точка возврата новая, поэтому он возвращается не на путь, а на точку с которой начал атковать.

Можно сохранять точку возврата только когда атакует с mode_walt,а не mode_base. Тогда будет как хочешь.

Код
if (distance_to_object(o_mag)<radius) and mode=mode_base and vosvrat=true   {mode=mode_attack}
if (distance_to_object(o_mag)<radius) and mode=mode_walt   {ppt=path_position
        x_put=x
        y_put=y
path_end(); mode=mode_attack}
if (distance_to_object(o_mag)>radius) and mode=mode_attack {mode=mode_base}


Make me fat

Сообщение отредактировал parl - Суббота, 07 Декабря 2013, 12:56
InsomniaДата: Вторник, 10 Декабря 2013, 22:00 | Сообщение # 9
был не раз
Сейчас нет на сайте
parl - Огромное спасибо!

Все получилось!

Вот ссылка, может кому нибудь пригодиться - http://yadi.sk/d/9EopMKXbE3tqo

Враг движется по заданным координатам, если видит героя, то преследует его, если герой пропадает из виду, то враг ждет 1,5 сек и возвращается на то место с которого начал преследование и продолжает патрулирование

Добавлено (09.12.2013, 21:54)
---------------------------------------------
Есть еще вопросик, как сделать что бы спрайт врага отрисовывался в направления движения, так как direcshion при движении отрисовывает под разными углами, а нужно чтоб только 90 и 180 были

Добавлено (10.12.2013, 22:00)
---------------------------------------------
Сделал - http://yadi.sk/d/s6XHBsNdE7UFJ
Если кому пригодиться

MrSlapДата: Воскресенье, 15 Декабря 2013, 01:06 | Сообщение # 10
почетный гость
Сейчас нет на сайте
Insomnia, создай переменную в create со значением 1. Меняй значение на -1,когда персонаж идёт влево (вид сбоку?). А в отрисовке спрайта Draw умножь x на эту переменную.

Создаю интерактивную повесть.
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Движение (Движение врага с использованием Paths)
  • Страница 1 из 1
  • 1
Поиск:

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