Прежде всего, подумайте, действительно ли вы хотите это сделать - это намного дороже в вычислительном отношении, чем другие методы обнаружения столкновений (например, ограничивающая рамка, столкновение по кругу), которые могут быть не такими точными, но для большинства целей работают хорошо достаточно.
Если вы действительно хотите это сделать, вы должны сгенерировать маску для каждого из ваших спрайтов, между которыми вы хотите обнаружить столкновение. В идеале эта маска должна быть простым 1-битным представлением вашего спрайта.
Далее, для каждого спрайта, который вы хотите проверить на столкновение, вам нужно сделать несколько шагов:
Поскольку столкновение с точностью до пикселя займет много времени, сначала выполните столкновение ограничивающего прямоугольника между двумя спрайтами, чтобы увидеть, нужно ли вам даже проверять наличие столкновения на уровне пикселей.
Если вы знаете, что спрайты столкнулись на границах, вычислите прямоугольник столкновения. На этом этапе вы можете выполнить оптимизацию, которая говорит, что если они превышают X%, они столкнулись. Особенно, если ваши альфа-области спрайта расположены вдоль внешних краев.
Используя прямоугольную область столкновения, пройдите через маски каждого из ваших спрайтов - если оба пикселя равны 1, у вас есть столкновение - выйдите из цикла и сделайте то, что вам нужно, чтобы пометить их как столкнулся.
Как видите, это очень сильно загружает процессор по сравнению с другими методами, поэтому я рекомендовал использовать его в начале. Если в системе нет аппаратной поддержки коллизий с точностью до пикселя (на самом деле это было у Atari 2600), большинство игр не будут использовать значения пикселов для коллизий.
Если вы решили использовать подход с ограничивающим прямоугольником, вы можете сделать такие вещи, как сужение ограничивающего прямоугольника, используемого для столкновений, чтобы предотвратить ложные срабатывания, когда два спрайта касаются друг друга в углу.
Удачи!