Коллизия объектов одного класса pygame

Уже который час бьюсь над следующей проблемой: за моим персонажем гонится n врагов (пусть будет 6). Не могу понять, как сделать коллизию такой, какой она реализована в Vampire Survivors или 20 minutes till dawn, то есть враги не "входят" друг в друга.

Я попробовал несколько способов, но не один не помог. Пытался писать так:

col = pygame.sprite.spritecollide(sprite, enemy_group, False)
# или
col = pygame.sprite.groupcollide(sprite, enemy_group, False)

Как выглядит вся функция:

    def custom_draw(self, _player):
    self.center_target_camera(_player)

    ground_offset = self.ground_rect.topleft - self.offset
    self.display_surface.blit(self.ground_surf, ground_offset)

    for sprite in self.sprites():
        if sprite in enemy_group:
            col = pygame.sprite.groupcollide(sprite, enemy_group, False)

            if col:
                sprite.speed = 0

        # for sprite1 in self.sprites():
        #     if sprite.rect.collidepoint(sprite1.rect.x, sprite1.rect.y):
        #         sprite.rect.x -= 10
        #         sprite1.rect.x -= 10
        #         sprite.rect.y -= 10
        #         sprite1.rect.y -= 10

        # print(sprite, sprite.rect.x, sprite.rect.y)
        offset_pos = sprite.rect.topleft - self.offset
        self.display_surface.blit(sprite.image, offset_pos)

player написан через нижнее подчёркивание для исключения shadownaming. Я пробовал различные способы протестировать спрайты, самым действенным оказался при "коллизии" перенос спрайтов в случайные координаты x, 0 координата по y ИЛИ перезапись скорости врага приравняв её к нулю. Как я выяснил, спрайты почему-то всегда "сталкиваются" с другими, даже когда (визуально для меня) не так, и я не могу понять почему.

В качестве "проверки работы коллизии" для начала я просто планировал убивать ( sprite.kill() ) объекты, но они мгновенно исчезали, даже если друг друга не касались.

P.S Если нужна дополнительная информация/код, пишите


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