lelu0 Temat założony przez niniejszego użytkownika |
[Allegro] Optymalizacja kodu » 2014-02-08 19:15:05 Cześć, szukałem tutoriali w google ale wujek milczy. Tak więc zadaję tu pytanie: moja gra ma koszmarną wydajność. I zastanawiam się co zrobić żeby ją poprawić. Na moim chyba niezłym sprzęcie chodzi koszmarnie, więc nie wiem co by było na gorszych. Nie chcę gotowca, proszę tylko o informację nad którym fragmentem kodu powinienem popracować, ew. wskazówka co zmienić. Z góry dziękuję :) #include <allegro.h> volatile long speed = 0; void increment_speed() { speed++; } END_OF_FUNCTION( increment_speed );
LOCK_VARIABLE( speed ); LOCK_FUNCTION( increment_speed );
int main() { allegro_init(); install_keyboard(); set_color_depth( 16 ); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 ); install_timer(); install_int_ex( increment_speed, BPS_TO_TIMER( 60 ) ); clear_to_color( screen, makecol( 0, 96, 240 ) ); install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" ); set_volume( 255, 255 ); BITMAP * kaczka = NULL; BITMAP * bufor = NULL; SAMPLE * water = NULL; BITMAP * grass = NULL; BITMAP * brzegl = NULL; BITMAP * brzegr = NULL; BITMAP * island = NULL; bufor = create_bitmap( 800, 600 ); if( !bufor ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "Nie mogê utworzyæ bufora !" ); allegro_exit(); return 0; } kaczka = load_bmp( "duck.bmp", default_palette ); if( !kaczka ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogê za³adowaæ obrazka Ludek !" ); allegro_exit(); return 0; } grass = load_bmp( "grass.bmp", default_palette ); if( !grass ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogê za³adowaæ obrazka trwa !" ); allegro_exit(); return 0; } brzegl = load_tga( "bord.tga", default_palette ); if( !brzegl ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogê za³adowaæ obrazka bl !" ); allegro_exit(); return 0; } brzegr = load_tga( "bord2.tga", default_palette ); if( !brzegr ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogê za³adowaæ obrazka bp !" ); allegro_exit(); return 0; } island = load_tga( "isl.tga", default_palette ); if( !island ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogê za³adowaæ obrazka isl !" ); allegro_exit(); return 0; } water = load_sample( "mc.wav" ); if( !water ) { set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 ); allegro_message( "nie mogę załadować dzwieku !" ); allegro_exit(); return 0; } int kaczka_x = 100, kaczka_y = 100; int kaczka_hp = 100; int hpctrl = 0; allocate_voice( water ); while( !key[ KEY_ESC ] ) { voice_start( 0 ); while( speed > 0 ) { if( key[ KEY_LEFT ] ) { kaczka_x--; if( kaczka_x < 15 ) kaczka_x++; if( kaczka_y > 250 && kaczka_y < 350 && kaczka_x < 500 ) kaczka_x++; } if( key[ KEY_RIGHT ] ) kaczka_x++; if( kaczka_x > 730 ) kaczka_x--; if( key[ KEY_UP ] ) kaczka_y--; if( kaczka_y < 0 ) kaczka_y = 540; if( key[ KEY_DOWN ] ) kaczka_y++; if( kaczka_y > 540 ) kaczka_y = 0; speed--; } hpctrl++; if( hpctrl > 2500 ) { kaczka_hp--; hpctrl = 0; if( kaczka_x < 90 && kaczka_y < 90 ) { kaczka_hp = kaczka_hp + 3; } } if( kaczka_hp < 0 ) { while( !key[ KEY_ESC ] ) { textout_ex( bufor, font, "Twoja kaczka zdechla z glodu!", 100, 250, makecol( 0, 0, 30 ), - 1 ); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); } return 0; } if( kaczka_hp > 105 ) { while( !key[ KEY_ESC ] ) { textout_ex( bufor, font, "Przekarmiles swoja kaczke!", 100, 250, makecol( 0, 0, 30 ), - 1 ); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); } return 0; } clear_to_color( bufor, makecol( 0, 96, 240 ) ); masked_blit( kaczka, bufor, 0, 0, kaczka_x, kaczka_y, kaczka->w, kaczka->h ); masked_blit( brzegl, bufor, 0, 0, 0, 0, brzegl->w, brzegl->h ); masked_blit( brzegr, bufor, 0, 0, 780, 0, brzegr->w, brzegr->h ); masked_blit( island, bufor, 0, 0, 300, 250, island->w, island->h ); masked_blit( grass, bufor, 0, 0, 0, 0, grass->w, grass->h ); textout_ex( bufor, font, "Duck simulator tech demo 0.2", 550, 550, makecol( 255, 0, 255 ), - 1 ); textout_ex( bufor, font, "lelu0", 550, 570, makecol( 255, 0, 255 ), - 1 ); textprintf( bufor, font, 20, 20, makecol( 255, 0, 128 ), "HP : %d", kaczka_hp ); blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); } void release_voice( int voice ); remove_int( increment_speed ); destroy_bitmap( brzegl ); destroy_bitmap( brzegr ); destroy_bitmap( kaczka ); destroy_bitmap( bufor ); destroy_sample( water ); allegro_exit(); return 0; } END_OF_MAIN();
|