Система определения столкновений. Быстрая.
Вроде бы стандартный вопрос со стандартным решением для геметрических, правильных объектов и это есть во всех физических движках.
Но стоит задача сделать обработку коллизий/столкновений в реальном времени для объектов неправильной геометрической формы: изображения различных предметов, имеющие свой уникальный контур, хранящиеся в png в 32 битном представлении. И таких объектов много. Делать попиксельный хиттест для каждого объекта в каждый момент времени - флеш повесится. Поэтому в ход идут алгоритмы, отсеивающие большинство объектов и я уже немало сделал. Но тяжко это, посему есть ли готовые решения подобного плана? Поправка: в каждый момент времени может двигаться только один обьект и двигать его будет пользователь мышой. То есть обработка столкновений не всех со всеми, а одного со всеми. |
Box 2D
|
1. Проверяем объекты сначала по пересечению их прямоугольников (можно DisplayObject::hitTestObgect() - можно тупо if (object.x < objects[i].x && ...
2. Если прямоугольники таки пересекаются, тогда уже проверяем BitmapData::hitTest() Примечание: Если объектов более 9000 и пункт первый затратен - используем сетку и реализуем пункт 1 с помощью нее. P.S. Другое дело - что потом делать с объектами, ну пересеклись и что? Красным подсвечивать - без проблем. А вот пододвигать чтобы не налазили - нужен подход посерьезней, представлении объектов более протыми фигурами, Box2D, и т.д. и .т.п. |
Я бы просто AABB проверял. ИМХО можно особо над broad phase не заморачиваться, всё равно самым тормозным участком будет попиксельная проверка.
И вообще постарался бы избавиться от попиксельной проверки, заюзав box2d и заменив pngшки телами соответствующей формы. Если задача позволяет. |
Не решает всей проблемы, но необязательно проверять прямо попиксельно - разрешение масок столкновений вполне можно понизить раза в 4.
|
MrPoma, писал же геометрически неправильных объектов. С боксом работал.
expl, у меня еще круче алгоритмы с предварительным кешированием объектов в 2 представлениях с несколькими этапами приближений. Цитата:
Цитата:
Цитата:
Ну а пока 100 предметов 100*200 полет нормальный! Всем спасибо, понял готовых крутых известных решений пока что нет. |
Часовой пояс GMT +4, время: 17:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.