Итак, как лучше всего обнаруживать столкновения в Android? Единственные примеры, которые я могу найти по всему этому, включают обнаружение, когда два объекта находятся прямо друг над другом. Лично я думал об использовании ограничивающих рамок, но даже этого я не знаю, как это сделать, и тогда мне все еще нужно что-то более точное (на пиксель?).
Обнаружение столкновений в Android
Ответы (3)
edthethird почти прав.
Вы хотите использовать myRectHitbox.intersect(myOtherRectHitbox)
вместо . contains(...)
. .contains(...)
срабатывает только в том случае, если один Rect полностью находится внутри другого, но .intersect(...)
срабатывает, если есть какой-либо пиксель, перекрывающий другой.
И если вы используете RectF
вместо Rect
, вы получите субпиксельную точность на устройствах, которые поддерживают субпиксели.
Если вы не являетесь экспертом в этом вопросе, я рекомендую вам использовать для этого библиотеку Box2d. Это очень полный физический движок с очень хорошей поддержкой обнаружения столкновений.
Полезная ссылка: http://www.4feets.com/2009/03/2d-physics-on-android-using-box2d/
Два шага:
Дайте всему, что может столкнуться с "хитбоксом". Держите
Rect
в ваших объектах того же размера, что и чертеж, и в том же месте.Позвоните одному из трех
myRectHitbox.contains(...)
. Таким образом можно проверить столкновения на точках или на перекрестках.