Реализация метода столкновений по соотношению - PullRequest
0 голосов
/ 16 января 2012

Я хотел бы создать список объектов, которые сталкиваются с пользователем. Однако я не хочу использовать метод sprite.collide_rect_ratio (), потому что он создает прямоугольную область, которая слишком велика для столкновения (то есть объекты кажутся сталкивающимися, даже если они на самом деле не касаются). Я хочу использовать pygame.sprite.collide_rect_ratio (ratio): чтобы решить проблему. Как реализовать метод, чтобы он возвращал список объектов, с которыми сталкивается пользователь?

В нем будет реализован тот же код, но с меньшей площадью коллизии, как в следующем коде:

sprite_list = pygame.sprite.spritecollide(myself, all_sprites_list, False)

Спасибо.

1 Ответ

0 голосов
/ 16 января 2012

Это может быть полезно для вас,

То, что вы, возможно, захотите посмотреть, это "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, будет единственным способом использования такого метода, чтобы получить список встречающихся спрайтов, насколько мне известно.

...