![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2012
Сообщений: 2
|
Здравствуйте.
Подскажите или посоветуйте материал (статьи, уроки) где раскрывается тема столкновения юнитов друг с другом в процессе передвижения к одной для всех цели (например, движение толпы монстров на игрока как в Alien Shooter). Пишу алгоритм поведения врагов для изометрического шутера, и наткнулся на данную проблему. В данный момент для каждого юнита(представлены как окружности), перед обновлением координат, проверяется столкновение со всеми остальными, если после добавления соответствующего значения вектора скорости по Х столкновение состоится, то движение юнита прекращается по оси Х, то же самое для У. Это работает корректно только для 2-3 юнитов, когда их больше, все остальные юниты игнорируют запрет на движение и сливаются воедино. Как решить данную проблему? Заранее благодарю. |
|
|||||
public function myHitTest(enemy:DisplayObject, hero:DisplayObject):Boolean { // вычисляем дистанцию var dx:Number = enemy.x - hero.x; var dy:Number = enemy.y - hero.y; // нормализуем дистанцию var dis:Number = Math.sqrt(dx * dx + dy * dy); // указываем минимальную(критичную) дистанцию для столкновения // я написал 10 пикселей как пример, используй сумму радиусов окружности. var need:Number = 10; // проверяем дистанцию и возвращаем истину если, // дистанция между объектами меньше критичной. if (dis < need) return true; // возвращаем лож если дистанция не прошла проверку. return false; }
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
|
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
вы изобретаете велосипед, есть специальный класс Point у которого есть метод distanse()
|
|
|||||
|
Вот так.
ЗЫ. не успел, ну да пусть ради примерчика висит.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Цитата:
В своём примере я просто продемонстрировал как это работает, я же не навязывал или там не"(V)утверждал(V)". А признаться, я как то "Point - ом" и не пользовался ни разу)))
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
2 + 2 и без Pointa сложить вполне себе можно. И по поводу велосипеда, это к Пифагору
![]() |
|
|||||
|
естественно медленнее. В готовом решении от Adobe - а, все переменные пере создаются, что влечёт за собой постоянный перезапуск чистильщика который в свою очередь гребёт ресурсы под себя.
Мне кажется, если бы разработчики не взирали на (столь "идеально" оптимизированные) решения от Adobe - а, все давно уже на флексе писали бы. =)
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Оперируйте квадратами расстояний.
__________________
Отряд Котовскага |
|
|||||
|
А и ... TanaTiX внимательнее к своим примерам, в спешке даже в одной строчке допускаете ошибки!
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:39. |
|
|
« Предыдущая тема | Следующая тема » |
|
|