Pygame: key.get_pressed () stimmt nicht mit der Ereigniswarteschlange überein

Ich versuche, einfache Steuerelemente für eine Anwendung mit Pygame in Python zu erarbeiten. Ich habe die Grundlagen, aber ich stoße auf eine seltsame Wand: Ich benutze die Pfeiltasten, um meinen Charakter zu steuern. Wenn ich eine Pfeiltaste und dann eine andere Pfeiltaste gedrückt halte (um mich diagonal zu bewegen), bewegt sich der Charakter wie erwartet. Allerdings, wenn ich das freigebezweite Taste, die ich gedrückt habe (während ich noch die Taste gedrückt halte)zuerst Taste) bleibt der Charakter stehen, obwohl ich die erste Taste gedrückt halte. Hier ist mein einfacher Bewegungscode:

for event in pygame.event.get():
    if event.type == QUIT:
        pygame.quit()
        sys.exit()
    elif event.type == KEYDOWN:
        if pygame.key.get_pressed()[K_LEFT]:
            player.pos = (player.pos[0] - 2, player.pos[1])
        if pygame.key.get_pressed()[K_RIGHT]:
            player.pos = (player.pos[0] + 2, player.pos[1])
        if pygame.key.get_pressed()[K_UP]:
            player.pos = (player.pos[0], player.pos[1] - 2)
        if pygame.key.get_pressed()[K_DOWN]:
            player.pos = (player.pos[0], player.pos[1] + 2)

Jetzt war ich natürlich sehr verwirrt. Also habe ich versucht, einige Zeilen zum Debuggen auszudrucken. Oben im Hauptregelkreis schrieb ich:

print (pygame.key.get_pressed()[K_DOWN], pygame.key.get_pressed()[K_RIGHT])
print pygame.event.get()

..., um ein Tupel auszugeben, das den Status der Pfeiltasten nach unten und nach rechts anzeigt, und anschließend die Pygame-Ereigniswarteschlange anzuzeigen. Meine Ergebnisse haben mich noch mehr verblüfft. Wenn ich das Zeichen diagonal nach unten und rechts bewege, drücke ich zuerst die Nach-unten-Taste und dann die rechte Taste.dann Lassen Sie die rechte Taste los, damit sich die Figur einfach nach unten bewegt. Die Bewegung stoppt wie zuvor. Dies wird jedoch auf die Shell gedruckt:

(1, 0)
[]

Das ist, wenn ichVeröffentlichung pygame.key.get_pressed () versteht, dass die Nach-unten-Taste immer noch gedrückt gehalten wird, sich jedoch nichts in der Ereigniswarteschlange befindet.

Auch früher im Code (vor dem Regelkreis) rufe ich auf

pygame.key.set_repeat(1, 2)

Damit bewegt sich der Charakter weiter, während die Taste gedrückt gehalten wird.

Jede Hilfe wird geschätzt! Vielen Dank :)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage