![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Всем доброго дня, у меня очередной вопрос к сообществу.
Представьте себе игровое поле, на котором движутся 2 (или более) объекта круглой формы (hero и enemy1, enemy2 и т.д.). Объект hero двигается за курсором мыши со скоростью V1. Обьекты enemy движутся за hero со скоростью V2, которая, естественно ниже скорости героя. Так вот задача следующая - при определении столкновения (как это сделать математически мне уже подсказали) нужно реализовать такое их поведение, чтобы объект enemy останавливался (с этим также нет проблем), а объект hero - начинал огибать контур enemy в направлении курсора мыши. Очевидно, что по сравнению с общей игровой сценой - радиусы объектов enemy и hero малы и говоря, что герой будет "огибать" врага - я понимаю, что скорее это будет не плавная круговая траектория, а, возможно, ломанная линия или что-то в этом духе. Помогите с фазой огибания - хочется иметь максимально простое и не требовательное к ресурсам решение. Все что находил в поиске тут и в гугле - имело отношение к отскоку объектов друг от друга (а-ля бильярдные шары). Ситуация, когда будет 2 врага и при столкновении, я начну огибать первого, подбежит второй и закроет проход - можно рассмотреть тут же или создам отдельный топик - пока понять бы как огибать просто одного врага. Спасибо заранее. |
|
|||||
|
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
самый простой способ - поиск пути методом потенциальных полей (гуглится быстро).
грубо говоря на каждого из твоих юнитов действует 2 типа силы - сила притяжения (от нас к целевой точке пути) и сила отталкивания(от каждого другого юнита к нам). сила отталкивания обратнопропорциональна расстоянию(квадрату расстояния, смотря какого эффекта добиваетесь) до юнита, сила притяжения - прямопропорциональна расстоянию до целевой точки пути. результирующее направление и есть направление движения. Последний раз редактировалось nuToH; 23.11.2011 в 16:54. |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Метод крайне интересен по своей сути, но как мне кажется для меня он не применим по 2-м причинам:
1. Он хорош для статичных препятствий, которые герой мог бы огибать интеллектуально, но когда препятствие динамично и стремится к герою - получится траектория самого героя очень уж широкой, чтобы оббежать врага, если курсор находится за его (врага) спиной. 2. В данном случае интеллектуальность траектории героя - это плохой фактор, т.к. суть игры - именно с помощью мыши (и реакции игрока) уводить героя от врагов. Вопрос огибания (обхода, другими словами) врага актуален лишь при условии, что касание состоялось! |
|
|||||
|
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
Можно просто не учитывать противника на расстоянии более N пикселей. а траектория правится коэффициентами и степенями силовых/весовых уравнений.
Последний раз редактировалось nuToH; 23.11.2011 в 17:35. |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Я вижу как мне кажется более простой метод, основанный скорее на математике, чем на физике:
Смотрим приложенную картинку: Герой - синий круг с центром в точке А. Враг - красный круг с центром в точке В. Курсор - в точке С. Моя идея такова - при столкновении двух обьектов - герой начинает двигаться вместо линейной траектории - по круговой траектории (штриховая красная линия на рисунке) до тех пор пока отрезок AC пересекает эту штриховую линию в 2-х точках (А и А'). Как только точки А и А' сойдутся в одну (точка D) - герой переходит опять на линейную траекторию. Тут соответственно встают следующие вопросы: 1. Как идея вообще? Может я не учел какие-то нюансы? 2. Подскажите уравнение движения по окружности (эллипсу), желательно не математическое, а скриптовое (математическое я знаю, но не совсем понимаю как из него правильно получить нужное) 3. В случае, если курсор находится в позиции C' - я так понимаю есть смысл переносить цель, к которой стремится герой - в точку А'. Может кто-то сможет попытаться накидать общий алгоритм такого линейно-нелинейного движения, как -то пока у меня не очень укладывается как все это обьединить в кучу. |
|
|||||
|
Цитата:
Добавлено через 39 секунд 2 касательных - справа и слева окружности |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Цитата:
Там абсолютно не нужны 2 касательные - достаточно одно, нужно лишь создать условие - определяющее, двигаться по часовой стрелке или против. А условие явно будет завязано на то, лежит ли отрезок АС слева или справа от точки В. |
|
|||||
|
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
идея отличная, не уверен что она легче в реализации, но зато в отличие от потенц полей тут все будет предсказуемо и однозначно.
есть еще легче вариант, если при следующем движении произойдет столкновение - проверять возможно ли двигаться +- 10 градусов влево/вправо. если нет тогда проверим +- 20 и т.д. при лобовом столкновении дело дойдет до 90 градусов и движение 1 шаг пройдет по касательной, далее угол будет уменьшаться. |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Цитата:
|
|
|||||
|
я думаю тут нужно сразу подумать о том что могут быть и другие преграды
мне кажется вот это как раз то что надо http://wonderfl.net/c/m29Y
__________________
Хороший отдых - половина работы. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:22. |
|
|
« Предыдущая тема | Следующая тема » |
|
|