Столкновение не по прямоугольникам в Pygame

Я делаю 2D-игру (платформер). Добавил в землю склон, но так как spritecollide() работает только по прямоугольникам-хитбоксам, то герой как бы парит в воздухе.

Вопрос: как сделать столкновение не по прямоугольникам в pygame, желательно без других модулей (но если других решений нет, пишите своё)?


Ответы (1 шт):

Автор решения: Cof. Cof.

Имею костыльную идею. Предлагаю хитбокс разделить на несколько более мелких хитбоксов. Примерно также это работает в 3д шутерах. Этот метод не даёт чистое столкновение по пикселям(только если на каждый ряд пикселей делать хитбокс). Это должно выглядеть примерно так:

def hitboxcollide(hitboxes,ygroup):
    ifcollide = False
    for box in hitboxes:
        if pygame.sprite.spritecollideany(box,ygroup):
            ifcollide = True
            break
    return ifcollide
  • hitboxes - хитбоксы

  • ygroup - группа (это Pygame объект) элементов, с которыми может столкнуться хитбокс.

  • ifcollide - булевое значение на вывод из функции (по аналогии со spritecollise)

Я не проверял моё решение и тем более не знаю как выглядит ваш код, поэтому тут определённо требуется доработка. Более того решение костыльное, ибо сама идея простая, но есть очень много условностей в исполнении.

→ Ссылка