Прежде всего, не бойтесь спрайтов.
Sprite
- это простой класс с изображением. (Surface
, который хранится в атрибуте image
), а также размер и положение изображения (Rect
хранится в атрибуте rect).
Итак, когда вы используете такой класс:
class Player:
def __init__(self, image, pos):
self.image = image
self.pos = pos
def draw(self, screen):
screen.blit(self.image, self.pos)
вместо этого вы можете просто использовать класс Sprite
, так как мало что изменится:
class Player(pygame.sprite.Sprite):
def __init__(self, image, pos):
super().__init__()
self.image = image
self.rect = image.get_rect(center=pos)
Вместо этого это стало проще, потому что мы можем позволить pygame обрабатывать отображение изображения на экране.
Итак, чтобы использовать идеальное столкновение пикселей, вы можете использовать Mask
< / a> класс. Используйте pygame.mask.from_surface
, чтобы создать Mask
из вашего Surface
, и используйте pygame.mask.Mask.overlap
, чтобы проверить, не перекрываются ли две маски.
Его проще использовать, если вы используете класс Sprite, поскольку вы можете просто использовать такие функции, как _ 13_ вместе с _14 _ а>.
Но если вы не хотите использовать класс Sprite
, просто посмотрите, насколько collide_mask
реализовано, чтобы узнать, как можно использовать маски:
def collide_mask(left, right):
xoffset = right.rect[0] - left.rect[0]
yoffset = right.rect[1] - left.rect[1]
try:
leftmask = left.mask
except AttributeError:
leftmask = from_surface(left.image)
try:
rightmask = right.mask
except AttributeError:
rightmask = from_surface(right.image)
return leftmask.overlap(rightmask, (xoffset, yoffset))
person
sloth
schedule
16.06.2020