执行以下代码时,不会捕获KEYDOWN事件。所需的结果是在任何按键时退出循环。如何使代码具有所需的效果?
while slideshow:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
elif event.type == pygame.KEYDOWN: slideshow = False
scope.screen.blit(safimg, (0, 0))
for t in statsurfs:
scope.screen.blit(t, (fontline * lnum, fontcol))
lnum += 1
lnum = 5
for t in dynsurfs:
scope.screen.blit(t, (fontline * lnum, fontcol * 2 - t.get_width()))
lnum += 1
pygame.display.flip()
pygame.time.delay(wtime * 1000)
for i in imgfiles:
img = pygame.image.load(i).convert()
#img = pygame.transform.scale(img, scope.size)
scope.screen.blit(img,(0, 0))
pygame.display.flip()
pygame.time.delay(wtime * 1000)
此外,任何有关如何优化代码的提示都将非常受欢迎,因为我是Python编程的新手。
答案 0 :(得分:1)
问题最有可能是你保持程序过快(也就是时钟)的方式。您目前正在使用
pygame.time.delay(1000 * wtime)
这不符合您的意图。
正确的方法是使用
clock = pygame.time.Clock()
(在代码开头设置时钟)然后调用
clock.tick(FPS)
在循环结束时(其中FPS是每秒所需的帧数)。这将使程序每秒循环60次。在您的代码中,
pygame.time.delay(1000 * wtime)
只是让程序等待,但程序实际上并没有运行任何东西;它只是在等待。如果您有其他问题,请回复此答案。祝你好运:D