Buenas,
Tengo un problema al recoger los eventos de teclado en SDL.
Mi personaje se mueve con las teclas w,a,s,d y salta con el espacio.
Para las teclas de dirección uso esto
unsigned char *keys;
keys = SDL_GetKeyState(NULL);
if (( keys[SDLK_s]) && ( keys[SDLK_d]) && ( keys[SDLK_a]))
...
else if (( keys[SDLK_w]) && ( keys[SDLK_d]) && ( keys[SDLK_a]))
...
else if (( keys[SDLK_w]) && ( keys[SDLK_d]))
...
Para el salto uso esto:
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
if (event.key.keysym.sym == SDLK_SPACE)
...
El caso es que esto funciona bien para la mayoría de los casos, digo mayoría porque para estas 3 combinaciones (a,w,d), (s,d), (a,s,d) no entra dentro del if de la barra espaciadora. Para todas las demás (a,s), (w,a), (w,d), a, s, d, w,... si entra dentro del if y todo se ejecuta normalmente.
Dentro del SDL_KEYDOWN parecen llegar las teclas de 1 en 1 y con las 3 primeras combinaciones nunca llega la barra, en las otras sí.
Alguna idea?
Muchas gracias y un saludo.
Segun esto: http://docs.mandragor.org/files/Common_libs_documentation/SDL/SDL_Documentation_project_en/sdlgetkeystate.html
se debe llamar a SDL_PumpEvents (http://docs.mandragor.org/files/Common_libs_documentation/SDL/SDL_Documentation_project_en/sdlpumpevents.html) para actualizar el array de las teclas. SDL_PollEvent y SDL_WaitEvent lo hacen internamente por lo que no es necesario. Puede que sea eso, que a veces si esta actualizado y a veces no.
La verdad es que no entiendo el movimiento del PJ y por que compruebas todos los casos.
Cuando puse el post lo estaba probando en otro ordenador y en Ubuntu, ahora desde otro ordenador en windows parece que todo funciona correctamente.
De todas maneras me gustaría que funcionase correctamente en los dos, así que le echaré un ojo a la información que me has pasado a ver si puede ser algo de eso.
Gracias.
Un saludo.