Pygame 碰撞检测存在缺陷

问题描述 投票:0回答:1

我正在 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
功能,但它仅有时有效。

python pygame collision-detection
1个回答
1
投票

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

例如

# 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() 
© www.soinside.com 2019 - 2024. All rights reserved.