Это может быть полезно для вас,
Возможно, вы захотите изучить «Столкновение на пиксель», которое сначала будет использовать ограничивающую рамку объекта (что, как я подозреваю, делает функция 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
будет единственным способом использования такого метода для получения списка сталкивающихся спрайтов.
person
Serdalis
schedule
16.01.2012