В моей игре у меня есть популяция рыбы (10). У каждой рыбы есть линия зрения (перед ней - объект дуги). Есть акулы, которые являются хищниками (они случайно перемещаются по комнате). Каждой рыбе присваивается номер разведки в начале. Когда акула входит в линию видимости рыбы, я хочу, чтобы рыба отклоняла его направление (или, по крайней мере, уходила в лучшем направлении), только если его номер разведки больше, чем случайный сгенерированный номер.Как обнаружить столкновение двух объектов только один раз в pygame?
Проблема в том, что когда я пытаюсь реализовать это, и акула попадает в линию зрения рыбы, pygame продолжает обнаруживать столкновение, поэтому python продолжает генерировать случайное число. Например, рыба может иметь очень низкий уровень интеллекта, но все же имеет очень высокую вероятность вырваться из акулы, потому что python продолжает обнаруживать столкновение, и у нее много попыток пройти панель. Для этого примера я действительно хочу, чтобы рыба, скорее всего, не изменила направления, когда акула находится на линии видимости.
В идеале, я хочу, чтобы python обнаружил столкновение один раз и, конечно, снова обнаружил, если акула снова проходит через линию визирования в отдельное время.
Вот мой код, не знаю, сколько это бы помогло:
class RedFish(pygame.sprite.Sprite):
def __init__(self, newDNA):
pygame.sprite.Sprite.__init__(self)
self.direction = random.uniform(0, math.pi*2)
self.speed = 2
self.intelligence = 100
def update(self):
self.rect.x -= math.sin(self.direction) * self.speed
self.rect.y -= math.cos(self.direction) * self.speed
for shark in sharks:
if pygame.sprite.collide_mask(arcsList[self.arcIndex], shark):
temp = random.randrange(400)
if (temp < self.intelligence):
self.direction = self.direction*-1
Спасибо!
Я попробовал ваше второе предложение добавить его в список акул, которых он видел, и этого не избежать, и я считаю, что это сработало. благодаря – gamelanguage