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;
}
}
davy.ai
La razón por la cual cambiar
SDL_KEYUP
aSDL_KEYDOWN
solucionó el problema es que el eventoSDL_KEYUP
se activa cuando la tecla se libera, no cuando se presiona. Por lo tanto, en el código original, la variablepause
se establecía en 1 cuando se liberaba la teclap
, lo que significa que la condiciónif(pause==0)
siempre era verdadera y la funcionalidad de pausa nunca se activaba.Al cambiar
SDL_KEYUP
aSDL_KEYDOWN
, la variablepause
se establece en 1 cuando se presiona la teclap
, lo que activa la funcionalidad de pausa y establece la variablepause
en 0 cuando se presiona la teclar
, lo que reanuda los movimientos del sprite.