|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
|
Система определения столкновений. Быстрая.
Вроде бы стандартный вопрос со стандартным решением для геметрических, правильных объектов и это есть во всех физических движках.
Но стоит задача сделать обработку коллизий/столкновений в реальном времени для объектов неправильной геометрической формы: изображения различных предметов, имеющие свой уникальный контур, хранящиеся в png в 32 битном представлении. И таких объектов много. Делать попиксельный хиттест для каждого объекта в каждый момент времени - флеш повесится. Поэтому в ход идут алгоритмы, отсеивающие большинство объектов и я уже немало сделал. Но тяжко это, посему есть ли готовые решения подобного плана? Поправка: в каждый момент времени может двигаться только один обьект и двигать его будет пользователь мышой. То есть обработка столкновений не всех со всеми, а одного со всеми. |
|
|||||
1. Проверяем объекты сначала по пересечению их прямоугольников (можно DisplayObject::hitTestObgect() - можно тупо if (object.x < objects[i].x && ...
2. Если прямоугольники таки пересекаются, тогда уже проверяем BitmapData::hitTest() Примечание: Если объектов более 9000 и пункт первый затратен - используем сетку и реализуем пункт 1 с помощью нее. P.S. Другое дело - что потом делать с объектами, ну пересеклись и что? Красным подсвечивать - без проблем. А вот пододвигать чтобы не налазили - нужен подход посерьезней, представлении объектов более протыми фигурами, Box2D, и т.д. и .т.п. |
|
|||||
Я бы просто AABB проверял. ИМХО можно особо над broad phase не заморачиваться, всё равно самым тормозным участком будет попиксельная проверка.
И вообще постарался бы избавиться от попиксельной проверки, заюзав box2d и заменив pngшки телами соответствующей формы. Если задача позволяет.
__________________
while(1) {} Последний раз редактировалось Division; 07.03.2010 в 19:35. |
|
|||||
Регистрация: Feb 2009
Сообщений: 1,195
|
Не решает всей проблемы, но необязательно проверять прямо попиксельно - разрешение масок столкновений вполне можно понизить раза в 4.
|
|
|||||
Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
|
MrPoma, писал же геометрически неправильных объектов. С боксом работал.
expl, у меня еще круче алгоритмы с предварительным кешированием объектов в 2 представлениях с несколькими этапами приближений. Цитата:
Цитата:
Цитата:
Ну а пока 100 предметов 100*200 полет нормальный! Всем спасибо, понял готовых крутых известных решений пока что нет. |
Часовой пояс GMT +4, время: 17:14. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|