Например, представьте восьмиугольник. При обычном подходе вы могли бы не знать, как обнаружить столкновение между окружностью и восьмиугольником. Хорошо, но почему не сложить восемь линий вместе и не запустить скрипт обнаружения для каждой из этих линий? Неожиданно, обнаружение столкновения окружности с восьмиугольником оказывается очень простой вещью! Рассматриваемая форма даже не должна быть правильной; вы можете создать фигуру звезды, треугольника, или даже фигуру дома; обнаружение работает, потому что каждая линия обрабатывается отдельно.
Многие фигуры могут быть созданы из отрезков линий. Обнаружение столкновения выполняется для каждого сегмента линии отдельно.
Существует одна проблема, с которой вы можете столкнуться: множественные одновременные столкновения. Представьте фигуру прямоугольника и шар, сталкивающийся с углом. Вероятно, что ваш скрипт обнаружит два отдельных столкновения. Это прекрасно, если вы просто хотите знать, имели ли место два отдельных столкновения, но если вы хотите использовать реакцию на столкновение (рассмотренную в следующей главе), то какая линия должна реагировать на столкновение с окружностью? Ответ прост: сохраняйте изменение переменной frames для каждого столкновения. Первое наименьшее представляет столкновение, которое произошло первым. Тогда вы можете заставить окружность реагировать на соответствующее столкновение.
Если вы заинтересованы в разработке ваших собственных скриптов обнаружения столкновения для фигур, которые здесь не рассмотрены (например, столкновения точки с эллипсом), следуйте этой простой формуле:
1. Перечислите условия, которые должны быть выполнены, чтобы столкновение имело место.
2. Вычислите, как определить, выполнено ли каждое из условий.
Вам, вероятно, придется приобрести книгу по геометрии или тригонометрии, если вы ищете уравнения, которые определяют более сложные объекты, такие как эллипс или тор (форма пончика). Смотрите Дополнение E.
Обнаружение столкновения это фундаментальное требование для большинства игр, как бы просты они ни были