• Domingo 22 de Diciembre de 2024, 08:26

Autor Tema:  Problema con movimiento de sprite SDL c++  (Leído 2648 veces)

noob.9412

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema con movimiento de sprite SDL c++
« en: Domingo 26 de Agosto de 2012, 16:21 »
0
Hola colegas soy nuevo en este foro,espero que puedan ayudarme con este problemita. Pasa que quiero pasar este fragmento de pseudocodigo a c++ y no se como hacerlo:

if ( tecla_arriba AND NOT tecla_izquierda AND NOT tecla_derecha){ y--  }
if ( tecla_abajo AND NOT tecla_izquierda AND NOT tecla_derecha){ y++  }
if ( tecla_izquierda AND NOT tecla_arriba AND NOT tecla_abajo){ x--  }
if ( tecla_derecha AND NOT tecla_arriba AND NOT tecla_abajo){ x++  }

Esto haria que el personaje solo se se moviera en las direcciones arriba,abajo,derecha y izquierda y que no lo hiciera diagonalmente.El problema es que soy nuevo programando y no se como colocar eso en una expresion C++ utilizando la libreria SDL. Aqui les dejo un codigo de ejemplo:

Código: C++
  1. #include <stdio.h>
  2. #include <SDL.h>
  3.  
  4. void TECLADO();
  5.  
  6. SDL_Surface *pantalla;
  7. SDL_Event evento;
  8. SDL_Rect pj_r;
  9. SDL_Rect fondo_r;
  10.  
  11. bool salir = false;
  12. char TITULO[]="CODIGO BASICO SDL";
  13. int VEL = 1;
  14. int vel_x = 0;
  15. int vel_y = 0;
  16. int bbb = 0;
  17.  
  18. int main(int argc, char *argv[])
  19. {
  20.  
  21.         SDL_Init( SDL_INIT_VIDEO );
  22.         SDL_WM_SetCaption( TITULO, NULL );
  23.         pantalla = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE);
  24.        
  25.         pj_r.x = 0;
  26.         pj_r.y = 0;
  27.         pj_r.w = 50;
  28.         pj_r.h = 50;
  29.  
  30.         fondo_r.x = 0;
  31.         fondo_r.y = 0;
  32.         fondo_r.w = 640;
  33.         fondo_r.h = 480;
  34.  
  35.         while( salir == false )
  36.     {
  37.                 while( SDL_PollEvent( &evento ) )
  38.         {
  39.                         TECLADO();
  40.                         if( evento.type == SDL_QUIT ){ salir = true; }
  41.                         if(evento.key.keysym.sym == SDLK_ESCAPE ){ salir = true;}
  42.  
  43.                 }//FIN WHILE #2
  44.  
  45.                 pj_r.x += vel_x;
  46.                 pj_r.y += vel_y;
  47.  
  48.                 if(pj_r.x<0)pj_r.x=0;
  49.                 if(pj_r.x+50>640)pj_r.x-= vel_x;
  50.                 if(pj_r.y<0)pj_r.y=0;
  51.                 if(pj_r.y+50>480)pj_r.y-= vel_y;
  52.                
  53.                 SDL_FillRect(pantalla,&fondo_r,SDL_MapRGB(pantalla->format,0,0,0));
  54.                 SDL_FillRect(pantalla,&pj_r,SDL_MapRGB(pantalla->format,255,255,0));
  55.                 SDL_Flip(pantalla);
  56.                
  57.  
  58.         }//FIN WHILE #1
  59.        
  60.         SDL_Quit ();
  61. return 0;
  62. }
  63.  
  64. void TECLADO(){
  65.  
  66. if( evento.type == SDL_KEYDOWN )
  67.     {
  68.         switch( evento.key.keysym.sym )
  69.         {
  70.                         case SDLK_UP: vel_y -= VEL; break;
  71.                         case SDLK_DOWN: vel_y += VEL;  break;
  72.             case SDLK_LEFT: vel_x -= VEL;  break;
  73.             case SDLK_RIGHT: vel_x += VEL;  break;
  74.                 }
  75.     }
  76.    
  77.     else if( evento.type == SDL_KEYUP )
  78.     {
  79.         switch( evento.key.keysym.sym )
  80.         {
  81.             case SDLK_UP: vel_y += VEL; break;
  82.             case SDLK_DOWN: vel_y -= VEL; break;
  83.             case SDLK_LEFT: vel_x += VEL; break;
  84.             case SDLK_RIGHT: vel_x -= VEL; break;
  85.                 }
  86.     }
  87.  
  88. }
  89.  
  90.  
  91.  

No necesitan imagenes externas ya que estas son generadas por codigo. Si presionan las teclas de modo que el pj (cuadrado amarillo) se mueva diagonalmente veran cual es mi problema. lo que quiero es que solo se mueva vertical y horizontal mente. Estare esperando por sus respuestas , por favor ayudenme¡¡¡ :ayuda:

*NOTA: Utilizo la libreria SDL



ibito

  • Miembro HIPER activo
  • ****
  • Mensajes: 549
  • Nacionalidad: mx
  • Se mas de C++ que lo que se de ese CSS
    • Ver Perfil
    • http://www.ibquezada.com
Re:Problema con movimiento de sprite SDL c++
« Respuesta #1 en: Viernes 26 de Octubre de 2012, 17:30 »
0
Un poco tarde pero, intenta usar if-else-else-else...
______________________________________
www.hazjuegos.com Una comunidad dedicada al desarrollo de videojuegos.