Как обнаружить столкновение между спрайтом и какой-то сгенерированной пользователем формой.
Например. На экране есть несколько объектов. Пользователь берет палец и рисует круговую форму вокруг объекта (правило выбора - рисовать круг вокруг спрайта, но формы рисования могут быть различными). Мне нужно определить, какой объект выбран, который так же, как:
collision-detection
Huwell
источник
источник
Ответы:
Если форма нарисована в основном из отрезков линии от пользователя (или кривых Безье с контрольными точками), вы можете реализовать довольно широко используемый алгоритм, известный как Теорема о разделяющей оси . Проще говоря: если есть ось (единичный вектор, представляющий направление), на которой фигуры не перекрываются (их проецируемые значения не приводят к положительной разнице), объекты не перекрываются. Я использовал это в прошлом, и это сработало как шарм.
источник
Если форма нарисована от руки, как в Crayon Physics , вы можете держать массив прямых линий и проверять столкновения с каждой из них. Несмотря на прямые линии, вы можете использовать кривые Безье или что-то в этом роде.
источник
Подходы зависят от того, какие структуры данных вы выбираете, будь то растровые изображения или векторы.
Первый подход может обрабатывать произвольные сложные формы, прост в реализации, но использует больше памяти. На самом деле вы можете уменьшить накладные расходы памяти, используя сжатие, и ускорить его, используя иерархические структуры данных (октре) ...
Второй подход не так прост в реализации, но использует больше вычислительной мощности.
В каждом случае мера, если это имеет значение. Я бы попробовал сделать первый, потому что его проще реализовать. Удачи. :)
источник