Проверьте столкновение между изображением и линией |Pygame - PullRequest
1 голос
/ 01 ноября 2019

Я проверяю столкновение:

offset = (x0 - x1, y0 - y1)
result = player1.mask.overlap(player2, offset)

Работает между двумя изображениями.

Но если я хочу проверить столкновение между изображением и pygame.draw.line(...) (я использую it для создания маски из строки). mask.overlap возвращает None:

surface = self.gameDisplay.subsurface(pygame.draw.line(self.gameDisplay, colors.GREEN, [100, 100], [200, 200], 5))
line_mask = pygame.mask.from_surface(surface)
pygame.draw.line(self.gameDisplay, colors.GREEN, [100, 100], [200, 200], 5)

offset = (x0 - x1, y0 - y1)
result = player1.mask.overlap(mask, offset)

Извините за мой английский.

1 Ответ

1 голос
/ 01 ноября 2019

Вы пропустили создание поверхности с альфа-пикселем на .convert_alpha(), перед тем как создать маску из "линии" Поверхность:

line_rect = pygame.draw.line(gameDisplay, colors.GREEN, [100, 100], [200, 200], 5)
line_surf = gameDisplay.subsurface(line_rect)
line_mask = pygame.mask.from_surface(line_surf.convert_alpha())

x0, y0 = line_rect.topleft
x1, y1 = player1.rect.topleft

offset = (x0 - x1, y0 - y1)
if player1.mask.overlap(line_mask, offset):
    print("hit : ", count)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...