Problema con movimiento de sprite

Problema con movimiento de sprite

Notapor zeroxcol94 » Sab Ago 25, 2012 1:19 am

Hola a todos de nuevo, estoy aquí por que tengo un problema con mi sprite. Pasa que cuando yo presiono las teclas arriba y abajo a la vez el sprite se mueve en dirección diagonal, esto pasa cuando presiono todas las teclas que hacen un movimiento diagonal. entonces lo que quiero es que mi sprite solo se mueva solo a las direcciones ; arriba, abajo , izquierda , derecha y no lo haga a las direcciones diagonales. Intente solucionar este problema pero no di con la solución. Aquí les dejo el código fuente para que lo analicen y si pueden, me respondan:

Código: Seleccionar todo
#include <stdio.h>
#include <SDL.h>

void TECLADO();

SDL_Surface *pantalla;
SDL_Event evento;
SDL_Rect pj_r;
SDL_Rect fondo_r;

bool salir = false;
char TITULO[]="CODIGO BASICO SDL";
int VEL = 1;
int vel_x = 0;
int vel_y = 0;

int main(int argc, char *argv[])
{

   SDL_Init( SDL_INIT_VIDEO );
   SDL_WM_SetCaption( TITULO, NULL );
   pantalla = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE);
   
   pj_r.x = 0;
   pj_r.y = 0;
   pj_r.w = 50;
   pj_r.h = 50;

   fondo_r.x = 0;
   fondo_r.y = 0;
   fondo_r.w = 640;
   fondo_r.h = 480;

   while( salir == false )
    {
      while( SDL_PollEvent( &evento ) )
        {
         TECLADO();
         if( evento.type == SDL_QUIT ){ salir = true; }
         if(evento.key.keysym.sym == SDLK_ESCAPE ){ salir = true;}

      }//FIN WHILE #2

      pj_r.x += vel_x;
      pj_r.y += vel_y;

      if(pj_r.x<0)pj_r.x=0;
      if(pj_r.x+50>640)pj_r.x-= vel_x;
      if(pj_r.y<0)pj_r.y=0;
      if(pj_r.y+50>480)pj_r.y-= vel_y;
      
      SDL_FillRect(pantalla,&fondo_r,SDL_MapRGB(pantalla->format,0,0,0));
      SDL_FillRect(pantalla,&pj_r,SDL_MapRGB(pantalla->format,255,255,0));
      SDL_Flip(pantalla);
      

   }//FIN WHILE #1

   //DECARGA DE SUPERFICIES Y OTROS RECURSOS
   SDL_Quit ();
return 0;
}

void TECLADO(){

if( evento.type == SDL_KEYDOWN )
    {
        switch( evento.key.keysym.sym )
        {
            case SDLK_UP: vel_y -= VEL; break;
            case SDLK_DOWN: vel_y += VEL; break;
            case SDLK_LEFT: vel_x -= VEL; break;
            case SDLK_RIGHT: vel_x += VEL; break;
      }
    }
   
    else if( evento.type == SDL_KEYUP )
    {
        switch( evento.key.keysym.sym )
        {
            case SDLK_UP: vel_y += VEL; break;
            case SDLK_DOWN: vel_y -= VEL; break;
            case SDLK_LEFT: vel_x += VEL; break;
            case SDLK_RIGHT: vel_x -= VEL; break;
      }
    }

}


NOTA: El ejemplo utiliza la libreria SDL, y no necesita cargar imagenes externas ya que el sprite se genera por codigo.Solo necesitan compilarlo y ejecutarlo.
zeroxcol94
 
Mensajes: 9
Registrado: Jue Jul 26, 2012 3:33 pm

Re: Problema con movimiento de sprite

Notapor shackra » Dom Sep 09, 2012 11:38 pm

debes cambiar la lógica de tu código, en lugar de usar case intenta usar sentencias if y vigila que se cumpla la sentencia siempre y cuando las teclas derecha o izquierda no estén presionadas, creo que deberían de quedarte unas cuatro sentencias if aunque a primera vista creas que te harás de más sentencias... espero que me haya echo a entender :)
Avatar de Usuario
shackra
 
Mensajes: 308
Registrado: Lun Jun 15, 2009 4:10 pm
Ubicación: Costa Rica


Volver a Videojuegos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado