Это может быть полезно для вас,
То, что вы, возможно, захотите посмотреть, это "Per Pixel Collision", которая сначала будет использовать ограничивающую рамку объекта (что я подозреваю, функция collide_rect
делает).
Что вам нужно сделать, это найти, где сталкиваются прямоугольники и как далеко друг от друга они находятся.Затем вы проверяете, есть ли какие-нибудь непрозрачные пиксели одного спрайта, которые касаются непрозрачных пикселей другого спрайта ...
Эта ссылка может быть вам полезна, это очень хорошоГотовое руководство для платформы C ++, аналогичной Pygame.
Код Per Pixel Collision находится на половине пути вниз и действует так, как я описал выше.Надеемся, что это полезно для вас, поскольку устраняет необходимость в соотношениях прямоугольников из-за «невидимых столкновений».
Быстрый поиск в Google может помочь вам больше с этим типом обнаружения столкновений.
ДляНебольшое улучшение - вот пример кода Pygame:
for s in sprites:
# if no intersection then 'intersection' will be of size 0
intersection = s.Rect.clip(user.rect)
if intersection.width != 0 and intersection.height != 0:
# perform collision detection
Вот уже написанная и протестированная версия Из вики-сайта Pygame.Чтение каждой вещи на этой странице даст вам хорошие знания о столкновении пикселей и хороший пример кода, который вы можете использовать сразу.
извинения, если это было слишком далеко от темы, но я чувствую, что это может быть очень полезно дляВы как отношения (я чувствую) не будет хорошо работать для обнаружения столкновений.
Вы также можете посмотреть Документация прямоугольника в Pygame.
Что касаетсяВаш вопрос, перебирая все спрайты и используя метод collide_rect_ratio
, будет единственным способом использования такого метода, чтобы получить список встречающихся спрайтов, насколько мне известно.