Estoy haciendo un juego simple, y uno de los problemas que encontré es el molesto retraso al presionar una tecla continuamente.
Básicamente, cuando presiono (durante mucho tiempo), por ejemplo Up, mi objeto se moverá 1 unidad hacia arriba, no se moverá (durante aproximadamente 1 segundo), y luego se moverá continuamente 1 unidad hacia arriba (sin demoras).
Actualmente, uso esto para mover el objeto (SDL2):
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_UP:
//Move object 1 unit up
break;
//Other unrelated things omitted
}
break;
//Omitted other cases
}
}
Lo que me gustaría tener es eliminar el retraso, para que el objeto pueda moverse inmediatamente Upmuy rápidamente. ¿Hay alguna forma de hacer esto?
while key UP is down move 30 units per second
, y por segundo solo tiene sentido cuando tiene un tiempo medible entre la tecla hacia abajo y hacia arriba, generalmente más de un cuadro.Una forma alternativa (¡el enfoque de Josh también es genial!) Sería configurar un booleano
SDL_KEYDOWN
y posiblemente también ignorar todos los eventos clave repetidos. Eso puede hacerlo comprobando elrepeat
miembro del evento clave.Entonces podría implementar su propio temporizador, que no tiene que ser nada lujoso, e implementar la repetición de teclas usted mismo. Puede activar la acción directamente desde el temporizador o incluso generar un
SDL_KEYDOWN
evento y unificar las soluciones.fuente