Pygame 中的初始碰撞检测

Initial Collision Detection in Pygame

我最近 运行 在我的 Pygame 项目中进行了简单的碰撞检测测试。为了学习目的,我故意不使用 Sprite class 和 Pygame 提供的一些内置碰撞函数。我遇到的问题不是没有检测到碰撞。问题是碰撞持续的时间比他们应该的要长。

如果你 运行 我的代码,你会看到 Obstacle 物体随机从屏幕上掉下来,在一段时间内穿过 Player 物体,即使它们已经消失了。 collisions 计算 Obstacle 通过 Player 的坐标数,这似乎通常在 -17 到 -21 之间。为什么会这样?既然声明了布尔值 obstacle.exists = False,那么 Obstacle 对象不应该在它来得及通过 Player -17 到 -21 相交坐标之前被立即销毁吗?这可能是由 fps 问题引起的吗? 基本上,我想弄清楚的是如何让 Obstacle 在碰撞时 立即被销毁 ,以便 collisions 只减去一次。

无论是否存在障碍物,都会进行碰撞检测。您应该添加 obstacles.exists 作为碰撞检测的第一个测试:

if (obstacles.exists and 
        obstacles.x < player.x + player.w and
        obstacles.x + obstacles.w > player.x and
        obstacles.y < player.y + player.h and
        obstacles.h + obstacles.y > player.y):
    #do stuff