Коллизия объектов одного класса 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 Если нужна дополнительная информация/код, пишите