【发布时间】:2020-02-20 15:36:56
【问题描述】:
我正在尝试制作类似于 agar.io 的游戏。我有一个由玩家控制的 blob。它可以四处走动并吃东西。食物也有不同的等级。创建了 200 个食物类的实例:
def spawn_food(self):
if len(self.foods) <= 200:
self.foods.append(Food())
到目前为止一切正常,但是,如果我尝试在所有食物和 blob 之间运行碰撞检测,我的整个计算机都会挂起。这是代码:
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 种食物。谢谢
【问题讨论】:
标签: python optimization pygame collision-detection