Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





[SDL] Mantener tecla pulsada para mover sprite

Iniciado por Pumuki, 18 de Noviembre de 2008, 11:01:12 AM

« anterior - próximo »

Pumuki


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 ;
}

lemoniac

Una forma de hacerlo sería consultar el estado del teclado con SDL_GetKeyState (http://www.libsdl.org/cgi/docwiki.cgi/SDL_GetKeyState)

Y tu código cambiaría a algo similar a:
Código (c) [Seleccionar]
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.






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.