Оно возникает при обнаружении независимого от кадров столкновения между окружностью и линией. Этот случай рассматривается подробно в следующем разделе.
Линии пересекаются, но отрезки не пересекаются; следовательно, столкновения нет
Линии пересекаются, также как и отрезки; следовательно, столкновение произошло
Откройте файл line_segments_intersecting.fla в папке Chapter05. После определения объектов, которые представляют линии в этом файле, мы добавляем две переменных, x1 и x2, которые ограничивают отрезок линии. Я изменил функцию drawLine() из аналогичной в предыдущем файле примера таким образом, что она получает координаты границ x1 и x2 каждой линии и вычисляет на основании них координаты границ y1 и y2. Ниже представлена измененная функция drawLine().
1 function drawLine(line){
2 //Выбрать x
3 var x =line.x1;
4 //Найти y
5 var y =findY(line,x);
6 line.y1 =y;
7 //Переместить перо
8 clip.moveTo(x,y);
9 //Выбрать другой x
10 var x =line.x2;
11 //Найти y
12 var y =findY(line,x);
13 line.y2 =y;
14 //Нарисовать линию
15 clip.lineTo(x,y);
16 }
В этой функции мы перемещаем перо к одной границе и затем рисуем линию до другой границы. Результатом является визуальное представление отрезка линии. После того как функция вызвана, объект line содержит координаты x и y для обеих границ отрезка линии. Перед вызовом этой функции, объект line содержит лишь координаты границ x1 и x2. Координаты границ y1 и y2 вычисляются в этой функции в строках 5 и 12, и затем сохраняются в объекте line в строках 6 и 13.
Функция findIntersection() также имеет важное дополнение для наших текущих задач – она теперь проверяет, находится ли точка пересечения в пределах отрезков обеих линий. Эта функция приведена ниже.
1 function findIntersection(line_a,line_b){
2 var x =(line_b.b-line_a.b)/(line_a.m-line_b.m);
3 var y =line_a.m*x+line_a.b;
4 dot._x =x;
5 dot