Pygame: key.get_pressed () não coincide com a fila de eventos

Eu estou tentando trabalhar controles simples para um aplicativo usando pygame em Python. Eu tenho o básico trabalhando, mas estou batendo em uma parede estranha: estou usando as setas do teclado para controlar o meu personagem. Se eu segurar uma tecla de seta, segure outra tecla de seta (para mover na diagonal), o personagem se move como esperado. No entanto, se eu soltar osegundo tecla que apertei (enquanto ainda pressionavaprimeiro chave), o personagem pára de se mover, mesmo que eu ainda esteja segurando a primeira tecla. Aqui está o meu código de movimento simples:

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)

Agora, eu estava naturalmente muito confuso com isso. Então tentei imprimir algumas linhas para depurar. No topo do loop de controle principal, eu escrevi:

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

... para gerar uma tupla exibindo o estado das teclas de seta para baixo e para a direita e, em seguida, exibir a fila de eventos pygame. Meus resultados me deixaram ainda mais perplexo. Se eu mover o personagem diagonalmente para baixo e para a direita, pressione a tecla para baixo primeiro e depois a tecla direita,então solte a tecla direita para fazê-la mover-se simplesmente para baixo, o caractere pára de se mover como antes ... mas isso é impresso no shell:

(1, 0)
[]

Isto é, quando eulançamento a tecla de seta para a direita e ainda pressiona a tecla de seta para baixo, pygame.key.get_pressed () entende que a tecla de seta para baixo ainda está sendo pressionada, mas não há nada na fila de eventos.

Além disso, anteriormente no código (antes do loop de controle) estou invocando

pygame.key.set_repeat(1, 2)

para fazer o personagem continuar a se mover enquanto a tecla estiver pressionada.

Qualquer ajuda será apreciada! Obrigado :)

questionAnswers(4)

yourAnswerToTheQuestion