Como segurar com eficiência uma chave no Pygame?
[EDIT] Publiquei a solução lá em baixo. [/EDITAR]
Encontrei duas perguntas relacionadas:
Pygame mantenha pressionada a tecla causa um loop infinitopygame - botão de espera pressionadoMas eu quero ser específico. Como?
while not done:
for e in event.get():
if e.type == KEYDOWN:
keys = key.get_pressed()
if e.type == QUIT or keys[K_ESCAPE]:
done = True
if keys[K_DOWN]:
print "DOWN"
Quando pressiono a seta para baixo, ela imprime, mas apenas uma vez. Se quiser imprimi-lo outra vez, preciso pressioná-lo novamente.
Se eu usar a palavra-chave while,
while keys[K_DOWN]:
print "DOWN"
Eu recebo um loop infinito por algum motivo obscuro.
Essa alternativa lógica também é inútil:
if ((e.type == KEYDOWN) and keys[K_DOWN]):
print "DOWN"
E existe outro que de alguma forma limpa os eventos e você pode usar enquanto:
while not done:
for e in event.get():
if e.type == KEYDOWN:
keys = key.get_pressed()
if e.type == QUIT or keys[K_ESCAPE]:
done = True
while keys[K_DOWN]:
print "DOWN"
event.get()
keys = key.get_pressed()
Mas você pressiona a tecla para baixo por menos de um segundo e ela imprime milhares de vezes. (Mover um jogador seria impossível, e ajustar o relógio para isso não parece ser o caminho certo para lidar com isso (e eu tentei e falhei miseravelmente.)).
Pressionar e executar o bloco milhares de vezes é inútil. O que eu quero é pressionar a tecla e continuar com a ação enquanto eu não a libero, dentro da velocidade definida do relógio.