![]() |
Проверка на столкновение с линией
В коде реализовано создание прямой линии с помощью класса Graphics. Затем проверяется столкновение движущегося объекта с ней (hitTestObject). Однако если линия не строго вертикальная или горизонтальная, то ее границы являются прямоугольником, а сама она является по сути его диагональю. И столкновение срабатывает до того, как объект визуально сталкивается с ней.
Подскажите, как реализовать нормальное столкновение с этой линией, или альтернативный вариант. Заранее благодарю. |
1 - Сохраняете координаты начала и конца отрезка.
2 - Проверяете hitTestObject. if(!hitTestObject) return false; 3 - Разбиваете объект на точки лежащие на его границе. 4 - Находите формулу прямой, на которой лежит Ваш отрезок. 5 - Если находите 2 точки, полученные из пункта 3, лежащие с разных сторон прямой - объект пересекается с линией. |
incvizitor, спасибо что откликнулись.
Все ясно, кроме пункта 3. У меня объект - круг, что за точки, лежащие на его границе? |
Ну есть много методик как собрать точки лежащие на прямой. Но в данном случае проще использовать формулу расстояния точки от прямой. Если расстояние центра окружности от линии больше радиуса - то они не пересекаются.
|
Тогда все еще проще:
Код AS3:
Добавлено через 2 минуты Ну и разумеется, после понимания работы метода неплохо бы оптимизировать его работу и вынести вычисления параметров A, B и C — они высчитываются однажды, если линия не движется. |
incvizitor, Zebestov, большое спасибо! Все работает.
|
| Часовой пояс GMT +4, время: 15:19. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.