2016-04-15 6 views
1
import pygame 
pygame.init() 
events = pygame.event.get() 
    while True: 
    for event in events: 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_1: 
       print('this should work!!') 

Ich bin neu zu beiden Python und Pygame, nur versucht, das Keydown-Ereignis zu testen, aber es funktioniert nicht .... bitte helfen!pygame: pygame.KEYDOWN funktioniert nicht

Antwort

1

Sie müssen einige Anzeigeeigenschaften einrichten, bevor Sie Tastaturereignisse verwenden können. Kein Fenster, keine Schlüsselereignisse. So fügen Sie so etwas wie dies vor der while Schleife und es sollte funktionieren:

WIDTH=600 
HEIGHT=480 
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT)) 

Normalerweise würden Sie auch eine Uhr aufgebauter clock = pygame.time.Clock(), Frames pro Sekunde in clock.tick(frames_per_second), einige Objekte/Spieler/Rects usw. vor die Schleife, aber das überlasse ich dir.

Hier ist der Code mit einem Minimum-Display-Setup, die Schlüsselereignisse ermöglichen werden:

import pygame 

pygame.init() 
WIDTH=600 
HEIGHT=480 
SCREEN = pygame.display.set_mode((WIDTH, HEIGHT)) 

while True: 
    events = pygame.event.get() 
    for event in events: 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_1: 
       print('this DOES work! :)') 
0

Da Pygame nur auf Python v3.2 und unter läuft, kann ich das jetzt nicht testen.
Aber wenn ich nicht ganz von meinen Medikamenten bin, denke ich, das liegt daran, dass Sie das Display nicht aktualisieren.

Betrachten Sie diese Änderung:

import pygame 
pygame.init() 
events = pygame.event.get() 
while True: 
    for event in events: 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_1: 
       print('this should work!!') 
    pygame.display.flip() 

Dadurch wird die Anzeige aktualisiert und die Ereignisse auslösen, in der Anzeige auftreten.
Wenn Sie dies nicht tun, werden Sie mit einem veralteten Fenster enden, das nichts wirklich auslöst, rendert oder produziert, außer vielleicht ein anfängliches Rendern.

Gleichermaßen müssen Sie in vielen GL-Bibliotheken den Ereignispuffer leeren, da sonst der gleiche Effekt auftritt. Das heißt, Sie werden mit einem veralteten Fenster enden, das nur "hängt", weil Ereignisse versuchen, in den Puffer "hineinzukommen", aber Sie haben es nicht regelmäßig geleert. (Einige Grafikbibliotheken erfordern sogar, dass Sie den Ereignispool abfragen, auch wenn er leer ist, nur um die Ereigniswarteschlange zu "freigeben").

Also denken Sie daran, wenn Sie mit Grafiken arbeiten:

  • immer den Ereignispuffer nennen (auch wenn es leer ist)
  • immer Flip/aktualisieren Sie Ihre Szene, oder Ihre Anwendung versauert