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. 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 ); 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; }
|
|
jankowalski25 |
» 2012-03-18 21:28:52 |
|
SeaMonster131 |
» 2012-03-18 21:41:35 Może funkcję Menu() wywołujesz w głównej pętli gry? |
|
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. |
|
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. |
|
DejaVu |
» 2012-03-19 18:46:48 Polskie litery używasz w nazwach zmiennych?! Masakraaa :P |
|
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?
|
|
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ć. |
|
« 1 » 2 |