fla в папке Chapter05 на CD. В этом файле обнаружение столкновения кодируется в точности, как и здесь; отличие заключается в том, что вместо выдачи в качестве результата оператора trace при нажатии на фрагмент головоломки, фрагмент перетаскивается за курсором мыши, до тех пор, пока кнопка не отпущена.
Обнаружение столкновений с применением математики
Как вы только что видели, использование метода hitTest() довольно безболезненно. Я уже намекал, что использование кода для обнаружения столкновения, основанного на математике, является более трудной задачей. Так что это, вероятно, подходящее время сообщить вам, что создание этого вида обнаружения столкновений гораздо лучше, чем попытка использовать hitTest() для всех ваших нужд обнаружения столкновений. Давайте начнем с перечисления ограничений hitTest().
Ограничения формы объекта. Как вы видели ранее в этой главе, метод hitTest() работает только с ограничивающим прямоугольником клипа, или с точкой и фигурой внутри клипа. Как бы вы обнаруживали столкновения между двумя бильярдными шарами, или между шаром и наклонной линией? С помощью hitTest() обнаружение столкновения для этих ситуаций не могло бы быть точным, потому что эта функция не обрабатывает обнаружение столкновений между фигурами внутри двух клипов. Используя математику, мы можем создать код обнаружения столкновений для нескольких фигур.
Запрет на независимость кода и графики. Эта концепция может быть трудна для понимания. Во всех примерах, представленных далее в этой книге, мы обновляем позицию клипа на экране перехватом его текущей позиции, прибавлением к ней, и затем изменением позиции клипа. Это наилучшая практика для поддержания траектории в случаях, где объекты на экране должны использоваться в коде. Например, у вас могла бы быть переменная, которая хранит координату x шара. Когда приходит время обновить позицию шара, используя скорость по x, вы прибавили бы значение к переменной, которая хранит позицию по x, и затем установили бы позицию клипа на экране из этой переменной