Buenas, como podria hacer en SDL que cuando mantenga pulsado una tecla del teclado el personaje se mueva hasta que deje de pulsar? Programo para pc.
He buscado informacion, y encontre que dentro de la estructura keyboardEvent hay una variable state que puede recibir estos valores (SDL_PRESSED y SDL_RELEASED), pero no se como utilizarlos.
Tengo esto, consiguiendo que se mueva:
void Teclado(void)
{
SDL_Event evento; // Para leer el teclado
// Leer teclado
if (SDL_PollEvent(&evento))
{
if (evento.type == SDL_KEYDOWN)
{
switch (evento.key.keysym.sym)
{
case SDLK_UP: posy=posy-10 ; orientacion=norte; break;
case SDLK_DOWN: posy=posy+10 ; orientacion= sur; break;
case SDLK_LEFT: posx=posx-10 ; orientacion=oeste; break;
case SDLK_RIGHT: posx=posx+10 ; orientacion=este; break;
case SDLK_ESCAPE: encendido=false ; break;
}
}
}
return ;
}
Una forma de hacerlo sería consultar el estado del teclado con SDL_GetKeyState (http://www.libsdl.org/cgi/docwiki.cgi/SDL_GetKeyState (http://www.libsdl.org/cgi/docwiki.cgi/SDL_GetKeyState))
Y tu código cambiaría a algo similar a:
keys = SDL_GetKeyState(NULL);
...
if(keys[SDLK_UP])
{
posy-= 10;
orientacion = norte;
}
Si no llamas a la función Teclado un número de veces fijo por segundo, deberías cambiar ese 10 que tienes ahí para que el movimiento sea fluido e igual en todas las máquinas.
A parte, deberías cambiar el if por un while al llamar a SDL_PollEvent, porque es posible que si llegan más de un evento por frame se procesen los eventos más tarde de lo que toca o en el caso peor, que no se procesen nunca.
Como opinión subjetiva, si es en C++, te sugiero encapsular las posiciones en una clase sobrecargando los operadores para facilitarte la vida.