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

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

Ostatnio zmodyfikowano 2012-03-24 23:58
Autor Wiadomość
Gaatt
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
jankowalski25
» 2012-03-18 21:28:52
» KursyKurs STC kurs
P-52888
SeaMonster131
» 2012-03-18 21:41:35
Może funkcję Menu() wywołujesz w głównej pętli gry?
P-52892
Gaatt
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
SeaMonster131
» 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
DejaVu
» 2012-03-19 18:46:48
Polskie litery używasz w nazwach zmiennych?! Masakraaa :P
P-52943
Gaatt
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
SeaMonster131
» 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 2 Następna strona