Как проверить конфликты между маской и прямоугольником. в pygame? - PullRequest
2 голосов
/ 28 мая 2020

Я создал маску pygame вокруг основного спрайта. Моя игра состоит из плиток с прямоугольниками столкновений. установить вокруг них.

Как я могу проверить, сталкивается ли маска на моем основном спрайте с прямоугольником. одной из моих плиток в моем мире, не создавая дополнительных масок (поскольку это неэффективно)? Я знаю, что в pygame есть функции «collide rect» и «collide mask». Является ли функция столкновения для маски и прямоугольника?

1 Ответ

1 голос
/ 28 мая 2020

Является ли функция столкновения для маски и прямоугольника?

Нет, но вы можете написать ее самостоятельно и использовать ее как обратный вызов для функций группового столкновения:

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, но создание масок с заливкой не должно быть таким плохо.

Но если производительность становится проблемой, рассмотрите возможность кэширования масок, назначения их спрайтам или создания их заранее в спрайтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...