如何在一个中使用事件处理程序?蟒蛇

时间:2014-01-25 15:34:02

标签: python pygame

我希望最终用户点击" 2"显示框,一旦执行完毕,我希望他们能够点击这个框。加载其他功能。如果我使用两个处理程序,那么它会跳过一个处理" e"。基本上它会跳过第二个if语句。

if event.type == pygame.KEYDOWN and event.key == pygame.K_2:
                highlight = pygame.image.load('Highlightmenu.png')
                highlight = pygame.transform.scale(highlight, (270, 110))
                window.blit(highlight,(316, 300))
                pygame.display.flip()
                title()
                if event.type == pygame.KEYDOWN and event.key == pygame.K_e:
                    playerNames()
                    print("Loading the player names menu...")

1 个答案:

答案 0 :(得分:2)

那是因为你的if语句错了。你把第二个if放在第一个里面。因此,只有当事件是KEYDOWN并且键是2,并且事件是KEYDOWN且键是e时,第二个if中的语句才会执行。由于密钥不能同时为2和e,因此它永远不会执行。

你应该像这样拆分:

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_2:
        highlight = pygame.image.load('Highlightmenu.png')
        highlight = pygame.transform.scale(highlight, (270, 110))
        window.blit(highlight,(316, 300))
        pygame.display.flip()
        title()
    elif event.key == pygame.K_e:
        playerNames()
        print("Loading the player names menu...")

看起来你只想在之前按过2键才能回复e键。要解决此问题,您需要在程序中的某个位置保持状态。因此,当用户按下2时,它会变为不同的状态,然后您可以转到不同的状态。首先,您可以拥有一个可以保持您的状态的变量。稍后您可以查看[状态机]。1

除此之外,您的代码也存在一些问题。每次按下按钮时,都不应从磁盘加载文件。相反,在开头将它加载到字典中,并在需要时使用它。您不应该在事件循环中执行任何绘图代码。应该在事件循环之外调用blits和display flip。事件循环应该只更改定义应该是blit的变量。