pygame.event.get() Fehler beim Zurückgeben von Ereignissen innerhalb eines separaten Threads
Diese Abfrage bezieht sich auf Schwierigkeiten, die bei der Verwendung von pygame.event auftreten .get() innerhalb eines separaten Threads zum Verwalten von Benutzereingaben in einem von Pac-Man inspirierten Spiel. Der Codeausschnitt, der für den Empfang von Eingaben verantwortlich ist, lautet wie folgt:
def receiving_inputs(self): while True: events = pg.event.get() for event in events: if event.type == pg.KEYDOWN: if event.key == pg.K_UP: self.move = 'n' elif event.key == pg.K_RIGHT: self.move = 'e' elif event.key == pg.K_DOWN: self.move = 's' elif event.key == pg.K_LEFT: self.move = 'w' time.sleep(1/60) threading.Thread(target=self.receiving_inputs).start()
Wenn dieser Code ausgeführt wird, löst das Drücken der Tastaturtasten keine Ereignisse aus, während das Bewegen der Maus Ereignisse zurückgibt. Interessanterweise funktioniert derselbe Code einwandfrei, wenn er in der Hauptschleife des Programms und nicht in einem separaten Thread ausgeführt wird.
Die Frage ergibt sich aus dem Wunsch, die Häufigkeit von Tastendrücken, die in der Hauptschleife nicht registriert werden, durch die Verwendung eines separaten Threads zu minimieren .
Lösung:
Das unerwartete Verhalten ergibt sich aus der Tatsache, dass Ereignisse vorliegen müssen wird im Hauptthread verwaltet. Wie in der thepygame.event-Dokumentation angegeben:
[...] Das Ereignissubsystem sollte vom Hauptthread aus aufgerufen werden.
Während es möglich ist, Ereignisse aus einem separaten Thread zu veröffentlichen, ist das Ereignis Die Warteschlange kann nur vom Hauptthread verarbeitet werden. Daher
Stellen Sie sicher, dass Ereignisse im Hauptthread abgerufen werden:
def receiving_inputs(self): while True: events = pg.event.get() for event in events: ...
Erstellen Sie einen Thread, um den Spielstatus basierend auf dem zu ändern Veranstaltungen:
def move(self, move): ... thread = threading.Thread(target=self.move, args=(move,)) thread.start()
Das obige ist der detaillierte Inhalt vonWarum kann „pygame.event.get()' keine Ereignisse in einem separaten Thread zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!