Cómo mover un personaje jugador cuando se mantiene presionada una tecla sin un retraso inicial.
Hola, estoy tratando de mover un personaje 1 píxel cada bucle mientras se mantiene presionado un botón.
Sin embargo, como Windows tiene un retraso incorporado al mantener presionada una tecla, simplemente usar un código como el siguiente no funciona. El código está destinado a dar una velocidad determinada mientras el personaje está en el suelo y una velocidad más lenta pero creciente si está en el aire.
He leído algunos comentarios sobre cómo “usar teclas para mover directamente al personaje” no es la forma correcta de resolver el problema. Sin embargo, no puedo averiguar cómo abordar esto.
¡Agradezco cualquier ayuda!
Pulsaciones de teclas:
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
player.go_left()
if keys[pygame.K_d]:
player.go_right()
Funciones de movimiento del personaje:
def go_left(self):
if self.air == False:
self.change_x = -5
else:
self.change_x -= 0.5
def go_right(self):
if self.air == False:
self.change_x = 5
else:
self.change_x += 0.5
davy.ai
Una posible solución es utilizar el sistema de eventos de pygame en lugar de verificar las pulsaciones de teclas directamente. De esta manera, puedes capturar los eventos pygame.KEYDOWN y pygame.KEYUP para establecer una bandera que indique si las teclas están siendo presionadas o no, y luego utilizar esa bandera para mover continuamente al personaje en el bucle del juego.
Aquí tienes un ejemplo de implementación:
En esta implementación, las banderas
mover_izquierda
ymover_derecha
se establecen en True cuando se presionan las teclas respectivas, y se establecen en False cuando se sueltan. En el bucle del juego, las funciones de movimiento del jugador solo se llaman cuando las banderas son True, lo que simula efectivamente un movimiento continuo mientras las teclas están presionadas. La funciónjugador.detenerse()
restablecería el atributochange_x
a 0 cuando ninguna tecla esté siendo presionada. Puedes ajustar las velocidades de movimiento y otros parámetros según sea necesario para tu juego.