python - Pygame 碰撞检测有缺陷

标签 python pygame collision-detection

我正在编写我的第一个 Pygame 游戏。我正在尝试进行碰撞检测,但有时会起作用 -

我尝试使用pygame.sprite.groupcollide,实际上我使用pygame.sprite.collide_rect

这是我的碰撞代码:

for event in pygame.event.get():
    collision = pygame.sprite.collide_rect(Dog, spikeUp0) or pygame.sprite.collide_rect(Dog, spikeUp1) or pygame.sprite.collide_rect(Dog, spikeDown0) or pygame.sprite.collide_rect(Dog, spikeDown1)
    if collision:
        Game = False
        gameOver()

除了当我触摸尖峰时,会启动 gameOver 功能,但只是有时有效。

最佳答案

您必须在主循环而不是事件循环中进行碰撞测试。事件循环仅在事件发生时执行,这导致它“仅有时有效”。主循环是连续执行的。

例如

# main application loop 
while run:

    # event loop
    for event in pygame.event.get():

        # [...] event handling    


    # collison test
    collision = pygame.sprite.collide_rect(Dog, spikeUp0) or pygame.sprite.collide_rect(Dog, spikeUp1) or pygame.sprite.collide_rect(Dog, spikeDown0) or pygame.sprite.collide_rect(Dog, spikeDown1)
    if collision:
        Game = False
        gameOver() 

关于python - Pygame 碰撞检测有缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56500762/

相关文章:

python - 在列表的每个字典中添加一个元素(列表理解)

python - 我无法使用箭头键在 pygame 中移动图像

python - 有没有办法更改 Pygame 中导入的 .obj 文件的位置和大小?

Javascript 正确碰撞后重置函数

python - PYQT 使用 QSqlRelationalTableModel 和 QtableView 添加新记录

python - 如何从大多数网站获取 Twitter 链接 - Python

python - 为什么 OrderedDict 的值不相等?

python - pygame:当前时间毫秒和增量时间

java - 检测与线的碰撞并限制移动

javascript - SAT Polygon Circle Collision - 解决速度方向的交点并确定碰撞的一侧