Pygame: Schlüssel.get_pressed() nicht übereinstimmt mit der Ereignis-queue

Ich versuche zu arbeiten, einfache Steuerelemente für eine Anwendung mit pygame Python. Ich habe die Grundlagen der Arbeit, aber ich bin der Kollision mit einem seltsamen Wand: ich verwende die Pfeiltasten, um die Kontrolle meines Charakters. Wenn ich drücken Sie eine Taste, halten Sie dann eine Taste (Diagonal bewegen), der Charakter bewegt sich wie erwartet. Wenn ich allerdings die Freigabe der zweiten Taste, die ich gedrückt (während noch gedrückter ersten - Taste), wird der Charakter nicht mehr bewegt, obwohl ich bin immer noch gedrückt halten, die ersten Schlüssel. Hier ist meine einfache Bewegung code:

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)

Nun, ich war natürlich sehr verwirrt von diesem. Also habe ich versucht zu drucken, werden einige Zeilen zu Debuggen. In der Spitze der wichtigste Regelkreis, ich schrieb:

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

...zur Ausgabe eines Tupels der Anzeige des Status der nach unten und rechts Pfeiltasten,, und zeigt dann die pygame event-queue. Meine Ergebnisse verblüfft mich noch mehr. Wenn ich das Zeichen verschieben Diagonal nach rechts und nach unten, drücken die nach-unten-Taste zuerst und dann die rechts-Taste, dann lassen Sie die Rechte Taste, um es bewegen Sie einfach nach unten, das Zeichen nicht mehr bewegt als vorher... aber das ist gedruckt auf der shell:

(1, 0)
[]

Ist, wenn ich release die Pfeil-rechts-Taste und halten noch immer die nach-unten-Pfeiltaste, pygame.Schlüssel.get_pressed() versteht, dass die down-Taste wird immer noch gedrückt gehalten, aber es ist nichts in der event-queue.

Auch weiter oben in dem code (vor der control-loop) bin ich aufrufen

pygame.key.set_repeat(1, 2)

den Charakter weiter zu bewegen, während die Taste gedrückt gehalten wird.

Jede Hilfe wird dankbar sein! Danke 🙂

InformationsquelleAutor Mortimer McMire | 2012-08-10

Schreibe einen Kommentar