Pygame 碰撞检测有问题
Pygame Collision Detection Bugged
我正在编写我的第一个 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
功能,但只是有时会起作用。
您必须在主循环而不是事件循环中进行碰撞测试。事件循环仅在事件发生时执行,这导致它"only sometimes works"。主循环连续执行。
例如
# 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()
我正在编写我的第一个 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
功能,但只是有时会起作用。
您必须在主循环而不是事件循环中进行碰撞测试。事件循环仅在事件发生时执行,这导致它"only sometimes works"。主循环连续执行。
例如
# 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()