2017-08-21 2 views
0

J'essaye de faire apparaître une image dans une fenêtre de pygame si j'appuie sur une touche de mon clavier MIDI. L'image apparaît pendant une seconde puis disparaît.L'image de pygame disparaît instantanément

going = True 
while going: 
    screen.fill(white) 
    events = pygame.event.get() 
    for e in events: 
     if e.type in [QUIT]: 
      going = False 
     if e.type in [KEYDOWN]: 
      going = False 
      events = pygame.event.get() 
     if e.type in [pygame.midi.MIDIIN]: 
      screen.blit(IMG, (50, 60)) 
     pygame.display.update() 
pygame.quit() 

Et pas cela ne fonctionne pas non plus ..

if e.type in [pygame.midi.MIDIIN]: 
    screen.blit(IMG, (50, 60)) 
    pygame.display.update() 

Répondre

0

Le code écrit par vous devrait disparaître instantanément l'image en boucle se termine et pygame efface l'image instaneously. Je pense que ce que vous essayiez de faire, c'est que lorsque vous appuyez sur la nouvelle touche, la nouvelle image devrait être chargée afin que vous ne fassiez pas fausse route.

going = True 
while going: 
    screen.fill(white) 
    events = pygame.event.get() 
    for e in events: 
     if e.type in [QUIT]: 
      going = False 
     if e.type in [KEYDOWN]: 
      events = pygame.event.get() 
     if e.type in [pygame.midi.MIDIIN]: 
      screen.blit(IMG, (50, 60)) 
     pygame.display.update() 
pygame.quit() 
+0

J'ai essayé de supprimer les fausses assignations qui ne fonctionnaient pas. De plus, vous n'avez rien changé dans le code. –

+0

désolé j'ai changé je suppose qu'il n'a pas été enregistré J'ai modifié. Veuillez vérifier si cela fonctionne. –

1

Ce n'est pas un problème avec Python ou Pygame, mais avec l'utilisation correcte: Le code de la boucle while going est exécutée plusieurs fois par seconde, mais l'événement (MIDI appuyer sur la touche) ne se pose qu'une seule fois.

Vous devez changer la logique du programme pour déclencher une sorte d'état, par exemple show_image: lorsque l'événement MIDI est détecté, réglez show_image = True et dans la boucle while, affichez l'image que si show_image == True (indépendante de tout événement déclenché dans cette itération en boucle)

La logique de base devrait ressembler à ceci:

going = True 
show_image_1 = False 
show_image_2 = False 
... 
while going: 
    screen.fill(white) 
    events = pygame.event.get() 
    for e in events: 
     if e.type in [QUIT]: 
      going = False 
     if e.type in ...: 
      show_image_1 = True 
     if e.type in ...: 
      show_image_2 = True 
     ... 
    if show_image_1: 
     screen.blit(IMG_1, (50, 60)) 
    if show_image_2: 
     screen.blit(IMG_2, (50, 60)) 
    ... 
    pygame.display.update() 

Bien sûr, si vous avez plus d'une image, vous devriez avoir une certaine logique plus intelligent au lieu d'une if pour chaque image.

+0

Je pense que j'ai essayé de faire ça. J'ai essayé si e.type dans [pygame.midi.MIDIIN]: NoteList.append (MIDI_key), puis faites une boucle pour imprimer une image basée sur la touche MIDI_ mais elle disparaît toujours. Et si j'essaie de le faire en dehors d'une boucle ou d'une instruction if, j'obtiens une erreur d'index hors de portée car elle essaie de masquer l'image avant que NoteList() ait des valeurs –

+0

J'ai ajouté quelques explications – user3151902

+0

Ok j'ai fait les deux cette fois, NoteList.append() et show = True, alors si show == True ..... et cela a fonctionné. Mais maintenant l'image précédente disparaît chaque fois que j'essaie d'en créer une autre basée sur une autre entrée MIDI. –