| 
				
				Движение
				 |   |  
| 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 на эту переменную.
  Создаю интерактивную повесть.
 |  
| 
 | 
 |    |     
		
		 
 |