Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro 5] Menu - dwa kliknięcia

Ostatnio zmodyfikowano 2013-11-20 20:19
Autor Wiadomość
Ven_64
Temat założony przez niniejszego użytkownika
[Allegro 5] Menu - dwa kliknięcia
» 2013-11-20 19:45:52
Witam!
Mam problem z menu, polega on na tym, że gdy chce włączyć tryb pełnoekranowy, lub wrócić do okienkowego muszę kliknąć dwa razy (wraca mnie do menu głównego, muszę znowu wejść do ustawień i znowu kliknąć ).Powinno działać za jednym naciśnięciem Oto kod:
C/C++
#include <iostream>
#include <allegro5/allegro5.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_image.h>
int gra_w()
{
    return 0;
}
int gra_j()
{
    return 0;
}
int menu()
{
    ALLEGRO_MOUSE_STATE myszka;
    ALLEGRO_BITMAP * menu = al_load_bitmap( "m_g0.png" );
    al_draw_bitmap( menu, 0, 0, 0 );
    al_flip_display();
    while( true )
    {
        al_get_mouse_state( & myszka );
        if( myszka.buttons == 1 ) //graj
        {
            if( myszka.x <= 604 && myszka.x >= 184 )
            {
                if( myszka.y <= 178 && myszka.y >= 78 )
                {
                    al_rest( 0.1 );
                    ALLEGRO_BITMAP * menu_gra1 = al_load_bitmap( "m_gr0.png" ); //menu gry
                    al_draw_bitmap( menu_gra1, 0, 0, 0 );
                    al_flip_display();
                    while( true )
                    {
                        al_get_mouse_state( & myszka );
                        if( myszka.buttons == 1 )
                        {
                            if( myszka.x <= 604 && myszka.x >= 184 ) //gra wieloosobowa
                            {
                                if( myszka.y <= 178 && myszka.y >= 78 )
                                {
                                    al_destroy_bitmap( menu_gra1 );
                                    al_rest( 0.1 );
                                    return 1;
                                }
                            }
                            if( myszka.x <= 604 && myszka.x >= 184 ) //gra jedno osobowa
                            {
                                if( myszka.y <= 287 && myszka.y >= 191 )
                                {
                                    al_destroy_bitmap( menu_gra1 );
                                    al_rest( 0.1 );
                                    return 2;
                                }
                            }
                            if( myszka.x <= 604 && myszka.x >= 184 ) //powrot
                            {
                                if( myszka.y <= 400 && myszka.y >= 299 )
                                {
                                    al_destroy_bitmap( menu_gra1 );
                                    al_rest( 0.1 );
                                    return 3;
                                }
                            }
                        }
                    }
                }
            }
        }
       
        if( myszka.buttons == 1 ) //opcje
        {
            if( myszka.x <= 604 && myszka.x >= 184 )
            {
                if( myszka.y <= 287 && myszka.y >= 191 )
                {
                    al_rest( 0.1 );
                    ALLEGRO_BITMAP * ustawienia = al_load_bitmap( "m_u0.png" );
                    al_draw_bitmap( ustawienia, 0, 0, 0 );
                    al_flip_display();
                    while( true )
                    {
                        al_get_mouse_state( & myszka );
                        if( myszka.buttons == 1 )
                        {
                            if( myszka.x <= 604 && myszka.x >= 184 ) //fullscreen
                            {
                                if( myszka.y <= 180 && myszka.y >= 77 )
                                {
                                    al_destroy_bitmap( ustawienia );
                                    al_rest( 0.1 );
                                    return 4;
                                }
                            }
                            if( myszka.x <= 604 && myszka.x >= 184 ) //windowed screen
                            {
                                if( myszka.y <= 287 && myszka.y >= 191 )
                                {
                                    al_destroy_bitmap( ustawienia );
                                    al_rest( 0.1 );
                                    return 5;
                                }
                            }
                            if( myszka.x <= 607 && myszka.x >= 184 ) //powrot
                            {
                                if( myszka.y <= 401 && myszka.y >= 299 )
                                {
                                    al_destroy_bitmap( ustawienia );
                                    al_rest( 0.1 );
                                    return 3;
                                }
                               
                            }
                        }
                    }
                }
            }
        }
       
        if( myszka.buttons == 1 ) //wyjscie
        {
            if( myszka.x <= 607 && myszka.x >= 184 )
            {
                if( myszka.y <= 401 && myszka.y >= 299 )
                {
                    return 0;
                }
            }
        }
    }
    al_destroy_bitmap( menu );
}
int main()
{
    al_init();
    al_install_keyboard();
    al_install_mouse();
    al_init_font_addon();
    al_init_image_addon();
    al_set_new_display_flags( ALLEGRO_WINDOWED );
    al_set_new_display_refresh_rate( 60 );
    ALLEGRO_DISPLAY * okno = al_create_display( 800, 600 );
    al_set_window_title( okno, "Nowa Gra" );
    do
    {
        short opcja = menu();
        switch( opcja )
        {
        case 1:
            {
                gra_w();
                break;
            }
        case 2:
            {
                gra_j();
                break;
            }
        case 3:
            {
                menu();
                break;
            }
        case 4:
            {
                al_destroy_display( okno );
                al_set_new_display_flags( ALLEGRO_FULLSCREEN );
                al_set_new_display_refresh_rate( 60 );
                ALLEGRO_DISPLAY * okno = al_create_display( 800, 600 );
                al_set_window_title( okno, "Nowa Gra" );
                break;
            }
        case 5:
            {
                al_destroy_display( okno );
                al_set_new_display_flags( ALLEGRO_WINDOWED );
                al_set_new_display_refresh_rate( 60 );
                ALLEGRO_DISPLAY * okno = al_create_display( 800, 600 );
                al_set_window_title( okno, "Nowa Gra" );
                break;
            }
           
        }
    } while( menu() != 0 );
   
    al_destroy_display( okno );
    return 0;
}
P-96837
pekfos
» 2013-11-20 19:52:47
Po wybraniu czegokolwiek wychodzisz z funkcji.
P-96841
Ven_64
Temat założony przez niniejszego użytkownika
» 2013-11-20 20:17:24
Dzięki, ale nie widzę w tym problemu za bardzo. Mógł Byś wytłumaczyć trochę hm, szerzej problem? 
P-96850
pekfos
» 2013-11-20 20:19:20
Mógł Byś wytłumaczyć trochę hm, szerzej problem? 
To Ty powinieneś to zrobić.
P-96852
« 1 »
  Strona 1 z 1