Как я могу остановить врагов от перекрытия pygame - PullRequest
3 голосов
/ 20 июня 2020

Я пытаюсь найти способ, чтобы враги отслеживали игрока в моей 2-й игре (pygame), но не собирались в кучу

В настоящее время, когда я стреляю в них, пуля сталкивается и повреждает всех сгруппированных врагов. Я бы хотел, чтобы это был клад, но так, чтобы я не мог поразить каждого врага сразу

Это выглядит так

Вот гифка, на которой они собираются

I'm not sure how I would get the individual values of the enemies' positions so I can move them when they collide or how I should move them

This is what I currently have for the enemies to track the player:

     for aliveEnemies in enemy:
        if playerObj.rect.x - aliveEnemies.rect.x != 0:
            if playerObj.rect.x > aliveEnemies.rect.x:
                aliveEnemies.rect.x += 1
            if playerObj.rect.x < aliveEnemies.rect.x:
                aliveEnemies.rect.x -= 1
        if playerObj.rect.y - aliveEnemies.rect.y != 0:
            if playerObj.rect.y > aliveEnemies.rect.y:
                aliveEnemies.rect.y += 1
            if playerObj.rect.y < aliveEnemies.rect.y:
                aliveEnemies.rect.y -= 1"

Мы будем очень благодарны за любую помощь или указания в правильном направлении

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Прямоугольные объекты Pygame имеют функцию, называемую "colliderect", которая проверяет, перекрываются ли два прямоугольных объекта: https://www.pygame.org/docs/ref/rect.html#pygame .Rect.colliderect Вы можете использовать это, чтобы проверить каждого врага, перекрывают ли они другого. враг перед их перемещением.

1 голос
/ 20 июня 2020

Вы можете сделать обнаружение столкновений между врагами, чтобы определить, какие из них находятся слишком близко. Вам также нужно будет изменить их поведение, чтобы решить, что делать, когда они действительно подойдут слишком близко.

Если вы знаете, что у вас никогда не будет слишком много врагов, вы можете попробовать сравнить каждого врага с любым другим врагом. . Это займет O (N ^ 2) работы, но это, вероятно, нормально, если N ограничено.

Если вы все равно сравниваете каждого врага со всеми остальными, у вас есть более широкий выбор вариантов, чем просто «обнаружение столкновения ": как алгоритм Boids (который вместо этого выполняет предотвращение столкновений).

...