Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: misscelan en 31 de Enero de 2008, 05:20:05 PM

Título: Problemas con el input de SDL
Publicado por: misscelan en 31 de Enero de 2008, 05:20:05 PM
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.
Título: Problemas con el input de SDL
Publicado por: Martinez en 31 de Enero de 2008, 07:15:52 PM
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.
Título: Problemas con el input de SDL
Publicado por: misscelan en 31 de Enero de 2008, 09:13:50 PM
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.