Я пытаюсь сделать игру похожую на agar.io. У меня есть блоб, который контролируется игроком. Он может передвигаться и есть пищу. Есть и другой класс для еды. Создается 200 экземпляров класса еды:
def spawn_food(self):
if len(self.foods) <= 200:
self.foods.append(Food())
Все до тех пор, пока все работает нормально, однако мой компьютер зависает, если я пытаюсь запустить обнаружение столкновений между всеми продуктами и каплей. Это код:
def ate(self):
for food in self.foods:
if circle_collision(blob, food):
d.win.set_caption("eating")
else:
d.win.set_caption("not eating")
У меня такое ощущение, что оно дает сбой, потому что вычисления в circle_collision
очень сложны в вычислительном отношении, и я выполняю их 200 раз за кадр. Вот функция circle_collision
def circle_collision(one, two):
dx = one.pos[0] - two.pos[0]
dy = one.pos[1] - two.pos[1]
distance = math.hypot((dx**2), (dy**2))
if distance <= (one.radius + two.radius):
return True
return False
Теперь мой вопрос: как я могу улучшить эту функцию circle_collision? Кроме того, есть ли способ проверить наличие столкновений только на еду на определенном расстоянии от капли, чтобы не пришлось проверять все 200 ед. Спасибо