Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con el input de SDL

Iniciado por misscelan, 31 de Enero de 2008, 05:20:05 PM

« anterior - próximo »

misscelan

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.

Martinez

Segun esto: http://docs.mandragor.org/files/Common_libs_documentation/SDL/SDL_Documentation_project_en/sdlgetkeystate.html

se debe llamar a SDL_PumpEvents 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.

misscelan

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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.