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