elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda creando un menu usando la libreria SDL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda creando un menu usando la libreria SDL  (Leído 694 veces)
erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Duda creando un menu usando la libreria SDL
« 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:

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.


En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda creando un menú en vb
Programación Visual Basic
CICOLO_111234 3 1,277 Último mensaje 7 Agosto 2008, 12:21 pm
por JmHk
Dudas usando libreria Qt en C++ « 1 2 »
Programación C/C++
ZharkD 11 6,786 Último mensaje 4 Junio 2012, 21:07 pm
por clstincer
[BATCH] Creando un menu
Scripting
barnix456 7 4,663 Último mensaje 24 Febrero 2011, 19:40 pm
por juanbass
Programa usando libreria fstream
Programación C/C++
@ron 0 4,197 Último mensaje 14 Abril 2011, 03:01 am
por @ron
Creando una libreria sockets en C
Programación C/C++
xanxito 0 1,277 Último mensaje 30 Marzo 2015, 20:16 pm
por xanxito
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines