Я работал над этой проблемой обнаружения столкновений, и, кажется, есть 3 основных подхода, которые я мог бы предпринять:
Подход спрайта и маски. (И наложение спрайтов и проверка ненулевого числа в результирующих данных пикселя спрайта).
Ограничивающие круги, прямоугольники или многоугольники. (Создайте одну или несколько фигур, которые заключают в себе спрайты и выполните основные математические расчеты, чтобы проверить совпадения).
Использовать существующую библиотеку спрайтов.
Первый подход, хотя это было бы так, как я делал бы это в старые времена спрайтовых блоков 16x16, похоже, что просто не существует простого способа получить данные отдельных пикселей изображения и / или альфа-канал в Кварце (или OPENGL в этом отношении). Обнаружить перекрытие ограничивающего прямоугольника легко, но затем создать третье изображение из перекрытия и затем проверить его на наличие пикселей сложно, и я чувствую, что даже если бы мы могли заставить его работать, это было бы медленно. Я что-то упустил здесь?
Второй подход заключается в разделении наших спрайтов на несколько полигонов и проверке их на совпадения. Чем больше полигонов, тем точнее обнаружение столкновений. Преимущество в том, что это быстро и может быть точным. Недостатком является то, что это делает создание спрайтов более сложным. то есть мы должны создать полигоны для каждого спрайта. Для скорости лучше всего создать дерево многоугольников.
Третий подход, в котором я не уверен, это покупка кода (или использование лицензии с открытым исходным кодом). Я не уверен, какую библиотеку лучше всего использовать, или она облегчит жизнь или создаст нам проблему с ее интеграцией в наше приложение.
Короче говоря, я предпочитаю многоугольный и древовидный подход и буду признателен вам за ваши взгляды, прежде чем я начну писать много кода.
С наилучшими пожеланиями
Dave