es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SI en un SDL_PollEvent no funciona como se esperaba.

Editar: He resuelto el problema cambiando SDLKEYUP por SDLKEYDOWN. ¿Alguien podría explicarlo?

Estoy intentando programar un botón de pausa al presionar “p” en C con SDL2.

El siguiente código detiene los movimientos del sprite al presionar “p” y lo reanuda al presionar “r”:

SDL_PollEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_KEYUP:
switch(event.key.keysym.sym)
{
case SDLK_p:
pause=1;
break;
case SDLK_r:
pause=0;
break;
}
}

Pero el siguiente código no pausa al presionar “p”, int pause=0 se declara al comienzo y está fuera del bucle principal y no se modifica en ningún otro lugar que no sea en SDLK_p a continuación. Como si el if(pause==0) no funcionara:

SDL_PollEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_KEYUP:
switch(event.key.keysym.sym)
{
case SDLK_p:
if(pause==0)
{
pause=1;
break;
} else pause=0;
break;
case SDLK_ESCAPE:
continuer=0;
break;
}
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual cambiar SDL_KEYUP a SDL_KEYDOWN solucionó el problema es que el evento SDL_KEYUP se activa cuando la tecla se libera, no cuando se presiona. Por lo tanto, en el código original, la variable pause se establecía en 1 cuando se liberaba la tecla p, lo que significa que la condición if(pause==0) siempre era verdadera y la funcionalidad de pausa nunca se activaba.

    Al cambiar SDL_KEYUP a SDL_KEYDOWN, la variable pause se establece en 1 cuando se presiona la tecla p, lo que activa la funcionalidad de pausa y establece la variable pause en 0 cuando se presiona la tecla r, lo que reanuda los movimientos del sprite.

Comments are closed.