(Theta представляет собой угол, который образован траекторией шара с осью x).
На шаге 3 мы ищем фактическую точку, в которой окружность касается линии – точку контакта. На предыдущем шаге мы нашли точку, где окружность находится, когда она касается линии, но не фактическую точку касания окружности с линией. Для нахождения этой точки, мы должны представить линию нарисованную из центра окружности через точку контакта. Эта линия перпендикулярна линии, с которой мы сталкиваемся. Затем мы находим пересечение между этими двумя линиями. Эта точка и является тем, что мы ищем. Мы можем сравнить это точку с границами отрезка линии для определения, произошло ли столкновение.
Есть только одна вещь, которую мы не обсудили при рассмотрении перпендикулярной линии – уравнение для этой линии. Мы знаем уравнение для основной линии (оно хранится в объекте line), и мы знаем, что эта новая линия перпендикулярна основной линии. Линия, перпендикулярная другой линии, имеет наклон, который отрицателен и обратно пропорционален. Так, если основная линия имеет наклон 3, то все линии, перпендикулярные к ней, имеют наклон -1/3.
Все линии, перпендикулярные к данной, имеют наклон -1/3
Вот это да – так много шагов сделано, но в результате получилось что-то крутое: независимое от кадров обнаружение столкновений! Давайте посмотрим пример. Откройте файл circle_line.fla из папки Chapter05 на CD. В сцене есть два клипа. Один из них имеет имя экземпляра ball1 и будет клипом, который представляет окружность. Другой клип не имеет (не требует) имени экземпляра. Он сделан таким образом, что мы можем использовать функцию attachMovie() для создания нового экземпляра этого клипа. Он будет содержать линию, которая будет нарисована с помощью кода ActionScript. В этом файле много кода ActionScript, больше 100 строк. Мы собираемся сосредоточить внимание на описании кода ActionScript в функции getFrame(). Но для начала, ниже представлен обзор всего кода ActionScript для этого примера обнаружения столкновения окружности с линией