- Создайте буфер того же размера, что и экран (или поверхность, где находятся ваши фигуры). В каждой позиции он содержит логическое значение, есть ли спрайт; затем проверьте все «пиксели» пользовательской формы, находится ли на их месте спрайт (путем проверки значения этого логического значения). В качестве альтернативы, вы можете создать больше спрайтов, сохранив их идентификатор вместо логического; но это был случай 1 спрайта.
- Если созданная пользователем форма может быть представлена последовательностью линий, тогда Вы можете проверить, пересекает ли каждая такая линия спрайт. Поскольку спрайт имеет прямоугольную форму, а пользовательская форма - это линия, просто ищите «пересечение прямоугольника линии» ... (алгоритм разделения осей и один способ сделать это)
Подходы зависят от того, какие структуры данных вы выбираете, будь то растровые изображения или векторы.
Первый подход может обрабатывать произвольные сложные формы, прост в реализации, но использует больше памяти. На самом деле вы можете уменьшить накладные расходы памяти, используя сжатие, и ускорить его, используя иерархические структуры данных (октре) ...
Второй подход не так прост в реализации, но использует больше вычислительной мощности.
В каждом случае мера, если это имеет значение. Я бы попробовал сделать первый, потому что его проще реализовать. Удачи. :)