Является ли функция столкновения для маски и прямоугольника?
Нет, но вы можете написать ее самостоятельно и использовать ее как обратный вызов для функций группового столкновения:
def collide_mask_rect(left, right):
xoffset = right.rect[0] - left.rect[0]
yoffset = right.rect[1] - left.rect[1]
try:
leftmask = left.mask
except AttributeError:
leftmask = pygame.mask.Mask(left.size, True)
try:
rightmask = right.mask
except AttributeError:
rightmask = pygame.mask.Mask(right.size, True)
return leftmask.overlap(rightmask, (xoffset, yoffset))
Настоящая проблема производительности масок заключается в их создании во время выполнения с поверхности (например, collide_mask
делает с from_surface
, но создание масок с заливкой не должно быть таким плохо.
Но если производительность становится проблемой, рассмотрите возможность кэширования масок, назначения их спрайтам или создания их заранее в спрайтах.