我最近在Pygame项目中遇到了一个简单的碰撞检测测试问题。我故意不使用Pygame提供的Sprite
类和一些内置的碰撞函数用于学习目的。我遇到的问题不是没有检测到碰撞。问题是碰撞的持续时间比应有的长。
我的项目代码:https://github.com/tear727/pygame-game/blob/master/game.py
如果您运行我的代码,您将看到随机落入屏幕的Obstacle
个对象会在Player
个对象中传递一段时间,即使它们已经消失。 collisions
计算Obstacle
通过Player
的坐标数,通常介于-17到-21之间。为什么会这样?由于陈述了布尔obstacle.exists = False
,所以Obstacle
对象在有时间通过Player
-17到-21交叉坐标之前不应立即销毁吗?这可能是由fps问题造成的吗?
基本上,我想弄清楚的是如何在碰撞时立即将Obstacle
销毁 ,以便collisions
仅减去一次。
答案 0 :(得分:0)
无论是否存在障碍物,都会进行碰撞检测。您应该在碰撞检测中添加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