未捕获PyGame KEYDOWN事件

时间:2014-02-20 16:00:56

标签: python linux events pygame keydown

执行以下代码时,不会捕获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编程的新手。

1 个答案:

答案 0 :(得分:1)

问题最有可能是你保持程序过快(也就是时钟)的方式。您目前正在使用

pygame.time.delay(1000 * wtime)

这不符合您的意图。

正确的方法是使用

clock = pygame.time.Clock()

(在代码开头设置时钟)然后调用

clock.tick(FPS)

在循环结束时(其中FPS是每秒所需的帧数)。这将使程序每秒循环60次。在您的代码中,

pygame.time.delay(1000 * wtime)

只是让程序等待,但程序实际上并没有运行任何东西;它只是在等待。如果您有其他问题,请回复此答案。祝你好运:D