У меня есть метод, который получает группу спрайтов. Для каждого спрайта мне нужно найти любой другой спрайт, с которым он сталкивается, и вызвать его метод handle_collision.Поиск всех столкновений в пределах одной группы спрайтов (эффективно)
Как найти всех спрайтов, с которыми сталкивается каждый спрайт в группе? Вот моя идея найти все столкновения внутри группы.
@staticmethod
def check_collision_group(most_sprites: pygame.sprite.Group, screen):
for sprite in most_sprites:
most_sprites.remove(sprite)
collided_sprites = pygame.sprite.Group()
for sprite2 in most_sprites:
if pygame.sprite.collide_rect(sprite, sprite2):
collided_sprites.add(sprite2)
sprite.handle_collision(collided_sprites)
most_sprites.add(sprite)
Однако, это медленно. Количество столкновений, которое это должно было проверить, поразило меня, когда я распечатал их.
Немного поиска, и я нашел 2 идеи, которые, вероятно, намного быстрее.
Создание первого спрайта Группой и использование collidegroup из библиотеки pygame.sprite.
Только тестирование спрайтов вокруг спрайта, который вы тестируете. Идея от https://gamedev.stackexchange.com/questions/45392/how-do-i-detect-multiple-sprite-collisions-when-there-are-10-sprites.
Чтобы переформулировать вопрос: Что такое быстрый (но, надеюсь, все еще относительно простой) способ найти любой другой спрайт в группе, которая сталкивается каждый спрайт с?
Посмотрите пример маски в каталоге примеров pygame: в нем есть множество спрайтов, которые могут отскочить друг от друга, возможно, это сработает для вас. Я начинающий, чтобы не полностью понять это сам. (на linux он находится в /usr/local/lib/python2.7/dist-packages/pygame/examples) – marienbad