2014-01-25 43 views
0

我希望最终用户点击“2”来显示该框,一旦执行完成,我希望他们点击“e”加载其他功能。如果我使用两个处理程序,那么它跳过处理“e”的处理程序。基本上它跳过第二个if语句。如何在一个事件处理程序中使用? Python

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...") 

回答

2

这是因为你的if语句是错误的。你把第二个放在第一个里面。所以只有当事件是KEYDOWN,键是2,事件是KEYDOWN,键是e时,第二个语句才会执行。由于密钥不能同时为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和显示翻页。事件循环只应该改变定义什么应该是blit的变量。

相关问题