2014-01-25 2 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 была нажата раньше. Чтобы решить эту проблему, вам нужно сохранить состояние в вашей программе. Поэтому, когда пользователь нажимает 2, он переходит в другое состояние, после чего вы можете перейти к другим. Для начала вы можете иметь переменную, которая будет удерживать ваше состояние. Позже вы можете посмотреть [государственные машины]. 1

Кроме того, у вас также есть несколько проблем с кодом. Вы не должны загружать файл с диска при каждом нажатии кнопки. Вместо этого загрузите его в начале словаря и используйте его, когда вам это нужно. Вы не должны делать код рисования в цикле событий. Блестки и флип дисплея следует вызывать вне цикла событий. Цикл событий должен только изменять переменные, которые определяют, что должно быть blit.

Смежные вопросы