[C++ Allegro] Wolne wyświetlanie bitmapy.
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

[C++ Allegro] Wolne wyświetlanie bitmapy.

AutorWiadomość
Temat założony przez niniejszego użytkownika
[C++ Allegro] Wolne wyświetlanie bitmapy.
» 2012-03-18 21:17:06
Witam!
Piszę grę z użyciem Allegro5. Zamieściłem kod menu aplikacji. Program się kompiluje i działa na pozór poprawnie, jednak czas, który zajmuje wyświetlenie bitmapy zajmuje bardzo dużo czasu. Aplikacja nie ma jeszcze timera, więc powinna działać błyskawicznie. Dodam jeszcze, że program podczas działania zajmuje 98% CPU. Proszę o pomoc.

C/C++
int Menu()
{
    ALLEGRO_DISPLAY * display = NULL;
    al_init();
    al_init_image_addon();
   
    al_install_keyboard();
   
    display = al_create_display( 838, 638 );
   
    ALLEGRO_BITMAP * menu = NULL;
    menu = al_load_bitmap( "menu.bmp" );
   
    ALLEGRO_BITMAP * kwadrat = NULL;
    kwadrat = al_load_bitmap( "kwadrat.bmp" );
   
    ALLEGRO_BITMAP * czo ł gMenu0 = NULL;
    ALLEGRO_BITMAP * czo ł gMenu1 = NULL;
    ALLEGRO_BITMAP * czo ł gMenu2 = NULL;
    ALLEGRO_BITMAP * czo ł gMenu3 = NULL;
   
    czo ł gMenu0 = al_load_bitmap( "czołgMenu0.bmp" );
    czo ł gMenu1 = al_load_bitmap( "czołgMenu1.bmp" );
    czo ł gMenu2 = al_load_bitmap( "czołgMenu2.bmp" );
    czo ł gMenu3 = al_load_bitmap( "czołgMenu3.bmp" );
   
    al_convert_mask_to_alpha( czo ł gMenu0, al_map_rgb( 255, 0, 255 ) );
    al_convert_mask_to_alpha( czo ł gMenu1, al_map_rgb( 255, 0, 255 ) );
    al_convert_mask_to_alpha( czo ł gMenu2, al_map_rgb( 255, 0, 255 ) );
    al_convert_mask_to_alpha( czo ł gMenu3, al_map_rgb( 255, 0, 255 ) );
   
    bool koniec = false;
    bool rysuj = false;
   
    int wyborMenu = 0;
    al_draw_bitmap( menu, 0, 0, NULL );
    al_draw_bitmap( czo ł gMenu0, 50, wyborMenu * 70 + 212, 0 );
    al_flip_display();
   
    ALLEGRO_KEYBOARD_STATE key_state;
    al_get_keyboard_state( & key_state );
   
    int x = 0;
   
   
    while( !koniec )
    {
        al_get_keyboard_state( & key_state );
       
        if( al_key_down( & key_state, ALLEGRO_KEY_UP ) )
        {
            if( wyborMenu == 0 ) wyborMenu = 4;
            else wyborMenu--;
           
            if( wyborMenu == 3 ) wyborMenu--;
           
        }
       
        if( al_key_down( & key_state, ALLEGRO_KEY_DOWN ) )
        {
            if( wyborMenu == 4 ) wyborMenu = 0;
            else wyborMenu++;
           
            if( wyborMenu == 3 ) wyborMenu++;
           
        }
       
        if( al_key_down( & key_state, ALLEGRO_KEY_SPACE ) )
        {
            koniec = true;
           
        }
       
        al_draw_bitmap( menu, 0, 0, NULL );
        al_draw_bitmap( czo ł gMenu0, 50, wyborMenu * 70 + 212, NULL );
        x++;
        al_draw_bitmap( kwadrat, x, 30, NULL ); //widać szybkość odświeżania obrazu
        al_flip_display();
    }
    al_draw_bitmap( menu, 0, 0, 0 );
    al_draw_bitmap( czo ł gMenu0, 50, wyborMenu * 70 + 212, 0 );
    al_rest( 0.1 );
    al_flip_display();
    al_draw_bitmap( czo ł gMenu1, 50, wyborMenu * 70 + 212, 0 );
    al_rest( 0.1 );
    al_flip_display();
    al_draw_bitmap( czo ł gMenu2, 50, wyborMenu * 70 + 212, 0 );
    al_rest( 0.1 );
    al_flip_display();
    al_draw_bitmap( czo ł gMenu3, 50, wyborMenu * 70 + 212, 0 );
    al_rest( 0.1 );
    al_flip_display();
    al_rest( 0.7 );
   
   
    al_destroy_bitmap( menu );
    al_destroy_bitmap( czo ł gMenu0 );
    al_destroy_bitmap( czo ł gMenu1 );
    al_destroy_bitmap( czo ł gMenu2 );
    al_destroy_bitmap( czo ł gMenu3 );
   
    return wyborMenu;
}
P-52885
» 2012-03-18 21:28:52
» KursyKurs STC kurs
P-52888
» 2012-03-18 21:41:35
Może funkcję Menu() wywołujesz w głównej pętli gry?
P-52892
Temat założony przez niniejszego użytkownika
» 2012-03-19 15:19:31
Tak. Wiem, że nie powinienem inicjalizować Allegro w funkcji Menu(), bo funkcja będzie później jeszcze co najmniej raz wywoływana. Jednak nie sądzę, aby to miało wpływ na wolne wyświetlanie grafiki (mogę się mylić).Myślę, że chodzi o wyświetlanie bitmapy, ponieważ próbowałem wyświetlać mniejsze obrazki i wtedy program działał znacznie szybciej.
P-52929
» 2012-03-19 18:45:45
To wywal ładowanie bitmap z tej funkcji, jeżeli ta funkcja znajduje się w pętli głównej gry.
P-52942
» 2012-03-19 18:46:48
Polskie litery używasz w nazwach zmiennych?! Masakraaa :P
P-52943
Temat założony przez niniejszego użytkownika
» 2012-03-19 19:13:38
Naprawię, ale to też nie powoduje błędów. Mam tu zamieścić wszystkie pliki łącznie z graficznymi?
P-52944
» 2012-03-19 20:23:23
Z Twojego kodu wynika, że co każdą pętle wczytujesz kilka bitmap, a następnie je rysujesz. Wywal te wczytywanie bitmap przed pętle, a nie powinna gra zamulać.
P-52952
« 1 » 2
 Strona 1 z 2Następna strona