PYGAME:pygame 中的冲突在 100% 的情况下都不起作用

问题描述

子弹与敌人的碰撞有效,但经常无效,不知道为什么。碰撞代码

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