¿Puede la entrada clave constante mover un sprite constantemente?

Si quiero mover un sprite basado en la entrada de claves en pygame, ¿hay algún modo de escribir código, así que si presiono una tecla, el sprite seguirá moviéndose en esa dirección hasta que suelte la tecla? He intentado esto y el progtwig falla o tengo que tocar repetidamente las teclas para mover el sprite en la dirección deseada.

El OP desea realizar un sondeo de estado clave, no eventos KEYDOWN .

Este ejemplo muestra el uso tanto de eventos clave como de sondeo clave. Utiliza uno para ‘presionar la tecla’ y el otro para ‘mientras se mantiene presionado’.

 import pygame from pygame.locals import * done = False player.pos = Rect(0,0,10,10) while not done: for event in pygame.event.get(): # any other key event input if event.type == QUIT: done = True elif event.type == KEYDOWN: if event.key == K_ESC: done = True # get key current state keys = pygame.key.get_pressed() if keys[K_LEFT]: player.pos.left -= 10 if keys[K_RIGHT]: player.pos.left += 10 if keys[K_UP]: player.pos.top -= 10 if keys[K_DOWN]: player.pos.left += 10 if keys[K_SPACE]: print 'firing gun' 

Como resumen,

  • Escucha el evento KEYDOWN en la cola de mensajes de pygame.
  • Compruebe si la tecla que le interesa está presionada hacia abajo.
  • Mover en esa direccion
  • Verifique la cola de mensajes para el evento KEYUP que coincida con su clave.
  • Deja de moverte

Lea la documentación sobre cómo implementar esto.

Normalmente usas una función de movimiento en tu método de actualización que se ve así:

 this.pos_x = direction * speed * delta 

Ahora, en los eventos de KEYDOWN, establece su dirección en 1 o -1 y en KEYUP lo vuelve a configurar en 0. De esa manera, tiene un movimiento constante y agradable.