pygame.mask.from_surface
работает, только если на поверхности есть альфа-канал.Либо передайте pygame.SRCALPHA
в качестве flags
(второго) аргумента pygame.Surface
self.image = pygame.Surface((40, 50), pygame.SRCALPHA)
, либо позвоните convert_alpha
self.image = pygame.Surface((40, 50)).convert_alpha()
, либо позвоните set_colorkey
self.image.set_colorkey((0, 0, 0))
Кстати, нет смысла создавать новые маски в методах move_x
и move_y
.Вы должны сделать это, только если вы измените поверхность self.image
.Для исполнения было бы лучше заранее создать маски и просто переключать их, когда вам нужна другая.