问题描述
子弹与敌人的碰撞有效,但经常无效,不知道为什么。碰撞代码:
def collision1(bullx,bully,enemyx,enemyy):
distance = math.sqrt(math.pow(enemyx - bullx,2) + math.pow(enemyy - bully,2))
if distance < 40:
return True
else:
return False
解决方法
我假设这段代码不是类的一部分。你不应该求一个二维向量的大小,因为当存在以下方法时,这是没有用的。
您需要做的是将敌人的 Rects 存储在列表中。要从 Surface 或图像获取 Rect,请执行 yourSurface.get_rect()
。对你的公牛性格也这样做。
在您的循环中,在绘制所有内容之前放入此代码:
if bullRect.collidelist(enemies) >= 0:
# Do whatever you want when the bull collides with an enemy
bullRect
是公牛的 Rect 对象,enemies
是敌人的 Rect 列表。
Rects 有一个函数来查看列表中的任何 Rects 是否发生冲突。 Rect.collidelist()
如果没有任何接触或接触 Rects 的数量减去 1,则返回 -1,因此 >= 0
部分。
要将其存储为函数,如您所愿,您可以这样做:
def bullCollides():
return bullRect.collidelist(enemies) >= 0