Эта операция имеет прямое применение в любой игре, которая использует шар, отскакивающий (или скатывающийся вниз) от стенки или возвышенности – игр вроде пинбола или минигольфа.
Мы начинаем рассматривать логику, необходимую для обнаружения столкновения между окружностью и линией. Мы предполагаем, что линия неподвижна, а окружность движется. Мы также предполагаем, что столкновения еще не было, когда мы начинаем процесс поиска столкновения (в противном случае выполнение кода скрипта не даст результата). В предыдущем разделе мы разработали метод обнаружения пересечения двух линий. Мы будем использовать его также и здесь. Шар в движении создает воображаемую линию по пути движения (его траектория). Мы определяем, где пересекаются эта линия траектории и основная линия. Как только это найдено, мы используем тригонометрию для определения точного места, где окружность сталкивается с линией. Затем мы находим точку столкновения ни линии (где окружность соприкасается с линией). Наконец, мы ищем текущее положение окружности и вычисляем, как много времени потребуется окружности, чтобы достичь точки столкновения. Если этот результат меньше или равен одному кадру, то столкновение произошло.
Чтобы резюмировать, выразим это процесс независимого от кадров обнаружения столкновения окружности с линией более кратко:
1. Определить точку пересечения между траекторией окружности и линией.
2. Использовать тригонометрию для нахождения координат окружности, когда она первоначально сталкивается с линией.
3. Найти координаты точки столкновения непосредственно на линии.
4. Вычислить число кадров, которое потребуется окружности для перемещения окружности из текущего положения в положение столкновения. Если это число меньше чем или равно 1, то столкновение произошло.
LINE
ЛИНИЯ
Intersection between path and line
Пересечение между траекторией и линией
Point of contact
Точка контакта
Position of circle at the time of collision
Положение окружности в момент столкновения
Вы уже видели, как выполнить то, что реализовано в шагах 1 и 4 в ранее рассмотренных разделах