2013-03-05 3 views
2

Создание моего первого сообщения здесь (или, откровенно говоря, любого форума), но мне было интересно, почему я не могу выйти, когда нажата кнопка выхода окна [x]. Я пробовал:Выход из окна pygame при нажатии

#print "Exit value ", pygame.QUIT 
for et in pygame.event.get(): 
    #print "Event type ", et.type 
    if et.type == pygame.KEYDOWN: 
      if (et.key == pygame.K_ESCAPE) or (et.type == pygame.QUIT): 
        print "In Here" 
        return True; 
pygame.event.pump()# not quite sure why we do this 
return False; 

Я узнал pygame.QUIT печатает значение 12, а я бегу Запрограммируйте печатает тип события «12», когда я нажимаю [х]. Строка «Здесь» никогда не печатается в этих случаях. Программа вернется правильно, когда возврат верен (когда я нажимаю ESC на клавиатуре). Я посмотрел на несколько вопросов, связанных с: Так

Я не работает на холостом ходу, я бегу это на:

Eclipse, Juno Service Release 1.
Python 2.7.3 с последней версией из pygame для 2.7 (по состоянию на 3/4/13).
Windows 7 & 8 и Ubuntu 12.04LTS (тот же результат, кроме отсутствия ошибок в Ubuntu звуковой карты)

Я запускать в Windows 7, дважды щелкнув файл .py, который запускает программу и до сих пор не выход на [х ]. Заранее спасибо.

ответ

2

В вашем цикле обработки событий,

#print "Exit value ", pygame.QUIT 
for et in pygame.event.get(): 
    #print "Event type ", et.type 
    #-----------------------------------------------------------------# 
    if et.type == pygame.KEYDOWN: 
      if (et.key == pygame.K_ESCAPE) or (et.type == pygame.QUIT): 
    #-----------------------------------------------------------------# 
        print "In Here" 
        return True; 
pygame.event.pump() # not quite sure why we do this 
return False; 

Проблема (между 2 #------------#)
Давайте проанализируем эту часть:

  1. Если если-блок будет введен, et.type == KEYDOWN
  2. И ваш чек на QUIT находится в if et.type == KEYDOWN.
  3. Поскольку et.type является KEYDOWN, он не может быть QUIT ..
  4. Итак, вы не проверяла et.type == QUIT,
    Итак, ваше окно будет просто не выйти, даже если нажать на «X».

Что делать?
поджать QUIT из KEYDOWN «s условное, что-то вроде:

done = False 
while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_ESCAPE: 
       done = True 
       break # break out of the for loop 
     elif event.type == pygame.QUIT: 
      done = True 
      break # break out of the for loop 
    if done: 
     break # to break out of the while loop 

    # your game stuff 

Примечание:

  • Вам не нужно ; после этих заявлений возвратных
  • Всегда проверяйте event.type в различные блоки if-elif, такие как

    if event.type == pygame.QUIT: 
        #... 
    elif event.type == pygame.KEYDOWN: 
        #... 
    
  • Вам не нужно pygame.event.pump() там, см Here
+1

Конечно, спасибо за наблюдение! – SGM1

0

Ваш главный цикл должен выглядеть следующим образом

done = False 
while not done: 
    for event in pygame.event.get(): 
     if event.type == KEYDOWN: 
      if event.key == K_ESCAPE: done = True 
     elif event.type == QUIT: 
      done = True 

    # draw etc... 
    pygame.display.update() 

Затем, если вы тумблер «сделано» в любом месте, это будет красиво уйти.

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