2013-03-05 5 views
2

Faire mon premier post ici (ou franchement un forum), mais je me demandais pourquoi je ne peux pas sortir lorsque le bouton de sortie de la fenêtre [x] a été pressé. J'ai essayé:fenêtre pygame Sortie sur clic

#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; 

J'ai découvert pygame.QUIT imprime une valeur de 12, comme je lance le programme imprime un type événement de 12 'lorsque je clique sur le [x]. La chaîne "Ici" ne s'imprime jamais à ces occasions. Le programme se termine correctement lorsque le retour est vrai (quand j'appuie sur ESC sur le clavier). Je l'ai regardé quelques questions connexes: Alors

Je ne suis pas en cours d'exécution sur IDLE, je suis en cours d'exécution sur:

service Eclipse Juno Release 1.
Python 2.7.3 avec la dernière version de pygame pour 2.7 (au 3/4/13).
Windows 7 & 8 et Ubuntu 12.04LTS (même résultat en plus de l'absence d'erreur de carte son dans Ubuntu)

J'ai couru dans Windows 7 en double cliquant sur le fichier .py qui exécute le programme et ne toujours pas sortie sur [x ] Merci d'avance.

Répondre

2

Dans votre boucle d'événement,

#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; 

Le problème (entre le 2 #------------#)
Analysons cette partie:

  1. Si le cas du bloc est entré, et.type == KEYDOWN
  2. Et votre chèque de QUIT est en if et.type == KEYDOWN.
  3. Depuis et.type est KEYDOWN, il ne peut pas être QUIT ..
  4. Donc, vous n'êtes pas la vérification des et.type == QUIT,
    Ainsi, la fenêtre tout simplement pas quitter, même si vous cliquez sur le « X ».

Que faire?
Tirez votre QUIT sur l » conditionnelle KEYDOWN, quelque chose comme:

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 

Note:

  • Vous n'avez pas besoin ; après ces déclarations de retour
  • Toujours vérifier event.type dans différents blocs if-elif, comme

    if event.type == pygame.QUIT: 
        #... 
    elif event.type == pygame.KEYDOWN: 
        #... 
    
  • Vous n'avez pas besoin il pygame.event.pump(), voir Here
+1

Bien sûr, je vous remercie pour l'observation! – SGM1

0

Votre boucle principale devrait ressembler à ceci

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() 

Ensuite, si vous appuyez sur « fait » importe où, il quittera bien.

Questions connexes