- Створіть буфер такого ж розміру, як екран (або поверхня, де є Ваші форми). У кожному положенні він містить булевий, чи є спрайт; потім перевірте всі "пікселі" форми користувача, чи знаходиться у їхньому положенні спрайт (перевіряючи значення цього булевого значення). Крім того, ви можете створити там більше спрайтів, зберігаючи їх ідентифікатор замість булевого; але це був випадок 1 спрайта.
- Якщо створена користувачем форма може бути представлена послідовністю рядків, то Ви можете перевірити, чи перетинає кожен спрайт спрайт. Оскільки спрайт має прямокутну форму, а форма користувача - це лінія, просто шукайте "перетин прямокутника лінії" ... (алгоритм розділення осей si один із способів зробити це)
Підходи залежать від того, які структури даних ви обираєте, будь то растрові карти чи вектори.
Перший підхід може працювати з довільними складними формами, простий у виконанні, але використовує більше пам'яті. Насправді ви можете зменшити накладні витрати на пам'ять, скориставшись стисненням та пришвидшити її, використовуючи ієрархічні структури даних (октриси) ...
Другий підхід, не такий простий у здійсненні, але використовує більше процесорної потужності.
У кожному випадку міра, якщо це має значення. Я спробував би зробити перший, тому що це простіше втілити. Удачі. :)