Código:
#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.