Título: Duda creando un menu usando la libreria SDL
Publicado por: erest0r en 30 Agosto 2013, 00:40 am
Hola de nuevo, he empezado a usar la libreria SDL por mi cuenta a punta de tutoriales, y tengo un problema en una parte del codigo que no sabria como solucionarlo, aqui va el codigo: #include "SDL/SDL.h"
int main( int argc, char* args[] ){
int eleccion = 0, imagen = 0;
SDL_Surface* screen2 = NULL; SDL_Surface* opcion1 = NULL; SDL_Surface* opcion2 = NULL; SDL_Surface* yoshi2 = NULL; SDL_Surface* pikachu2 = NULL; SDL_Surface* flecha = NULL;
SDL_Event tecla;
SDL_Rect posicion_opcion1; SDL_Rect posicion_opcion2; SDL_Rect posicion_pikachu2; SDL_Rect posicion_yoshi2; SDL_Rect posicion_flecha;
posicion_opcion1.x = 60; posicion_opcion1.y = 60;
posicion_opcion2.x = 60; posicion_opcion2.y = 180;
posicion_flecha.x = 300; posicion_flecha.y = 60;
SDL_Init( SDL_INIT_EVERYTHING );
opcion1 = SDL_LoadBMP( "opcion1.bmp" ); opcion2 = SDL_LoadBMP( "opcion2.bmp" ); flecha = SDL_LoadBMP( "flecha.bmp" ); yoshi2 = SDL_LoadBMP( "yoshi2.bmp" ); pikachu2 = SDL_LoadBMP( "pikachu2.bmp" ); screen2 = SDL_SetVideoMode(600, 660, 32, SDL_SWSURFACE);
while(true){ SDL_FillRect(screen2, 0, SDL_MapRGB(screen2->format, 0, 0, 0)); SDL_BlitSurface(opcion1, NULL, screen2, &posicion_opcion1); SDL_BlitSurface(opcion2, NULL, screen2, &posicion_opcion2); SDL_BlitSurface(flecha, NULL, screen2, &posicion_flecha); SDL_Flip(screen2); while(SDL_PollEvent(&tecla)){ if(tecla.type == SDL_QUIT){ SDL_FreeSurface(opcion1); SDL_FreeSurface(opcion2); SDL_FreeSurface(yoshi2); SDL_FreeSurface(pikachu2); SDL_FreeSurface(flecha); exit(0); } if(tecla.key.keysym.sym == SDLK_ESCAPE){ SDL_FreeSurface(opcion1); SDL_FreeSurface(opcion2); SDL_FreeSurface(yoshi2); SDL_FreeSurface(pikachu2); SDL_FreeSurface(flecha); exit(0); } else if(tecla.key.keysym.sym == SDLK_RETURN ){ if(eleccion == 0){ imagen = 1; while(imagen == 1){ SDL_FillRect(screen2, 0, SDL_MapRGB(screen2->format, 0, 0, 0)); SDL_BlitSurface(yoshi2, NULL, screen2, NULL); SDL_Flip(screen2); while(SDL_PollEvent(&tecla)){ if(tecla.key.keysym.sym == SDLK_ESCAPE){
imagen = 0; } } }
} else if( eleccion == 1 ){ imagen = 1; while(imagen == 1){ SDL_FillRect(screen2, 0, SDL_MapRGB(screen2->format, 0, 0, 0)); SDL_BlitSurface(pikachu2, NULL, screen2, NULL); SDL_Flip(screen2); while(SDL_PollEvent(&tecla)){ if(tecla.key.keysym.sym == SDLK_ESCAPE){
imagen = 0; } } }
} } else if(tecla.key.keysym.sym == SDLK_DOWN){ if(eleccion == 0){ posicion_flecha.y += 120; eleccion = 1; } } else if(tecla.key.keysym.sym == SDLK_UP){ if(eleccion == 1){ posicion_flecha.y -= 120; eleccion = 0; } } }
} return 0; }
El punto especifico esta que cuando el usuario selecciona una opcion, perfectamente le muestra la imagen de la eleccion que tomo, y cuando presiona ESCAPE para devolverse, el programa reconoce como si el usuario hubiese presionado la tecla 2 veces y se sale, en vez de regresar al menu principal. Muchas gracias de antemano.
|