Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.11.2011, 15:41
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 1  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Arrow Столкновение двух объектов круглой формы

Всем доброго дня, у меня очередной вопрос к сообществу.
Представьте себе игровое поле, на котором движутся 2 (или более) объекта круглой формы (hero и enemy1, enemy2 и т.д.). Объект hero двигается за курсором мыши со скоростью V1. Обьекты enemy движутся за hero со скоростью V2, которая, естественно ниже скорости героя.
Так вот задача следующая - при определении столкновения (как это сделать математически мне уже подсказали) нужно реализовать такое их поведение, чтобы объект enemy останавливался (с этим также нет проблем), а объект hero - начинал огибать контур enemy в направлении курсора мыши. Очевидно, что по сравнению с общей игровой сценой - радиусы объектов enemy и hero малы и говоря, что герой будет "огибать" врага - я понимаю, что скорее это будет не плавная круговая траектория, а, возможно, ломанная линия или что-то в этом духе.
Помогите с фазой огибания - хочется иметь максимально простое и не требовательное к ресурсам решение.
Все что находил в поиске тут и в гугле - имело отношение к отскоку объектов друг от друга (а-ля бильярдные шары).
Ситуация, когда будет 2 врага и при столкновении, я начну огибать первого, подбежит второй и закроет проход - можно рассмотреть тут же или создам отдельный топик - пока понять бы как огибать просто одного врага.
Спасибо заранее.

Старый 23.11.2011, 16:26
nuToH вне форума Посмотреть профиль Отправить личное сообщение для nuToH Найти все сообщения от nuToH
  № 2  
Ответить с цитированием
nuToH
 
Аватар для nuToH

Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
самый простой способ - поиск пути методом потенциальных полей (гуглится быстро).
грубо говоря на каждого из твоих юнитов действует 2 типа силы -
сила притяжения (от нас к целевой точке пути) и сила отталкивания(от каждого другого юнита к нам).
сила отталкивания обратнопропорциональна расстоянию(квадрату расстояния, смотря какого эффекта добиваетесь) до юнита, сила притяжения - прямопропорциональна расстоянию до целевой точки пути.
результирующее направление и есть направление движения.


Последний раз редактировалось nuToH; 23.11.2011 в 16:54.
Старый 23.11.2011, 17:08
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 3  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Метод крайне интересен по своей сути, но как мне кажется для меня он не применим по 2-м причинам:
1. Он хорош для статичных препятствий, которые герой мог бы огибать интеллектуально, но когда препятствие динамично и стремится к герою - получится траектория самого героя очень уж широкой, чтобы оббежать врага, если курсор находится за его (врага) спиной.
2. В данном случае интеллектуальность траектории героя - это плохой фактор, т.к. суть игры - именно с помощью мыши (и реакции игрока) уводить героя от врагов. Вопрос огибания (обхода, другими словами) врага актуален лишь при условии, что касание состоялось!

Старый 23.11.2011, 17:33
nuToH вне форума Посмотреть профиль Отправить личное сообщение для nuToH Найти все сообщения от nuToH
  № 4  
Ответить с цитированием
nuToH
 
Аватар для nuToH

Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
Можно просто не учитывать противника на расстоянии более N пикселей. а траектория правится коэффициентами и степенями силовых/весовых уравнений.


Последний раз редактировалось nuToH; 23.11.2011 в 17:35.
Старый 23.11.2011, 18:12
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 5  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Я вижу как мне кажется более простой метод, основанный скорее на математике, чем на физике:
Смотрим приложенную картинку:
Герой - синий круг с центром в точке А.
Враг - красный круг с центром в точке В.
Курсор - в точке С.
Моя идея такова - при столкновении двух обьектов - герой начинает двигаться вместо линейной траектории - по круговой траектории (штриховая красная линия на рисунке) до тех пор пока отрезок AC пересекает эту штриховую линию в 2-х точках (А и А'). Как только точки А и А' сойдутся в одну (точка D) - герой переходит опять на линейную траекторию.

Тут соответственно встают следующие вопросы:
1. Как идея вообще? Может я не учел какие-то нюансы?
2. Подскажите уравнение движения по окружности (эллипсу), желательно не математическое, а скриптовое (математическое я знаю, но не совсем понимаю как из него правильно получить нужное)
3. В случае, если курсор находится в позиции C' - я так понимаю есть смысл переносить цель, к которой стремится герой - в точку А'.

Может кто-то сможет попытаться накидать общий алгоритм такого линейно-нелинейного движения, как -то пока у меня не очень укладывается как все это обьединить в кучу.
Миниатюры
Нажмите на изображение для увеличения
Название: ShemeOpt.jpg
Просмотров: 176
Размер:	52.6 Кб
ID:	27278  

Старый 23.11.2011, 18:25
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 6  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Цитата:
Как только точки А и А' сойдутся в одну (точка D) - герой переходит опять на линейную траекторию.
Немного не так. Даже по Вашему рисунку видно, что переход на линейную траекторию можно начать раньше. Фактически - рисуем из точки С 2 касательных к окружности вокруг врага (которая красным пунктиром), и как только центр нашего героя совпадает с одной из точек касания - переходим на линейную траекторию

Добавлено через 39 секунд
2 касательных - справа и слева окружности

Старый 23.11.2011, 19:28
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 7  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от Ookami Посмотреть сообщение
Даже по Вашему рисунку видно, что переход на линейную траекторию можно начать раньше.
Не согласен, ни по моему рисунку, ни на самом деле - раньше выходить на прямую траекторию не стОит. Если не пренебрегать пересечением объектов, конечно.
Цитата:
Сообщение от Ookami Посмотреть сообщение
2 касательных - справа и слева окружности
Там абсолютно не нужны 2 касательные - достаточно одно, нужно лишь создать условие - определяющее, двигаться по часовой стрелке или против. А условие явно будет завязано на то, лежит ли отрезок АС слева или справа от точки В.

Старый 23.11.2011, 19:38
nuToH вне форума Посмотреть профиль Отправить личное сообщение для nuToH Найти все сообщения от nuToH
  № 8  
Ответить с цитированием
nuToH
 
Аватар для nuToH

Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
идея отличная, не уверен что она легче в реализации, но зато в отличие от потенц полей тут все будет предсказуемо и однозначно.
есть еще легче вариант, если при следующем движении произойдет столкновение - проверять возможно ли двигаться +- 10 градусов влево/вправо. если нет тогда проверим +- 20 и т.д. при лобовом столкновении дело дойдет до 90 градусов и движение 1 шаг пройдет по касательной, далее угол будет уменьшаться.

Старый 23.11.2011, 20:02
australian incognito вне форума Посмотреть профиль Отправить личное сообщение для australian incognito Найти все сообщения от australian incognito
  № 9  
Ответить с цитированием
australian incognito
 
Аватар для australian incognito

Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
Цитата:
Сообщение от nuToH Посмотреть сообщение
идея отличная, не уверен что она легче в реализации, но зато в отличие от потенц полей тут все будет предсказуемо и однозначно.
есть еще легче вариант, если при следующем движении произойдет столкновение - проверять возможно ли двигаться +- 10 градусов влево/вправо. если нет тогда проверим +- 20 и т.д. при лобовом столкновении дело дойдет до 90 градусов и движение 1 шаг пройдет по касательной, далее угол будет уменьшаться.
Да, этот метод был описан в одном популярном блоге - я с ним знаком. Но он слишком сложен и ресурсоёмок, в сравнении с моим (по-крайней мере мне так кажется) и хорош для сложных препятствий.

Старый 23.11.2011, 20:03
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 10  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
я думаю тут нужно сразу подумать о том что могут быть и другие преграды

мне кажется вот это как раз то что надо http://wonderfl.net/c/m29Y
__________________
Хороший отдых - половина работы.

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 20:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.