Я бы объединил столкновение ограничивающего прямоугольника и столкновение совершенства пикселей.
Таким образом, все сущности в вашей игре будут иметь ограничивающие рамки, просто кадры, равные ширине и высоте вашего спрайта.Используйте это в качестве теста на столкновение первого уровня.После того, как это сделано, и у вас есть коллизия, используйте карты коллизий, чтобы получить более высокий уровень детализации.
Эта оптимизация поможет повысить скорость и добавит гибкости движку, что не во всех коллизияхдолжен быть идеальным пикселем.
Что касается алгоритма коллизии с идеальным пикселем, то, что вы описываете, будет работать.Однако, если вы стремитесь к скорости, вы можете попробовать это:
придумать битовую маску для каждого спрайта (например, карту пикселей, но только один бит на пиксель), например:
00000000
00100000
01100000
01110000
когда один спрайт сталкивается с другим, создайте новую битовую маску из меньшей битовой маски того же размера, что и большая, и «сместите» ее разницей в положении между спрайтами.
Как только это будет сделано, поразрядно 'и' все байты в этих двух масках.Если какой-либо байтовый результат> 0, вы столкнулись.