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

[Allegro] Optymalizacja kodu

Ostatnio zmodyfikowano 2014-02-08 19:45
Autor Wiadomość
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ę :)
C/C++
#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 ) );
   
    //instalacja dzwieku
    install_sound( DIGI_AUTODETECT, MIDI_AUTODETECT, "" );
    set_volume( 255, 255 );
   
    //wczytywanie grafiki
    BITMAP * kaczka = NULL;
    BITMAP * bufor = NULL;
    SAMPLE * water = NULL;
    BITMAP * grass = NULL;
    BITMAP * brzegl = NULL;
    BITMAP * brzegr = NULL;
    BITMAP * island = NULL;
   
   
    //tworzenie bufora
    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;
    }
   
   
    // ladowanie kaczki
    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;
    }
    //ladowanie wody
    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 );
   
    //petla glowna
    while( !key[ KEY_ESC ] )
    {
        voice_start( 0 );
        //petla sterowania
        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--;
        }
        //karmienie
        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 ); //kopiowanie bufora na ekran
            }
            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 ); //kopiowanie bufora na ekran
            }
            return 0;
        }
       
       
       
       
       
       
        clear_to_color( bufor, makecol( 0, 96, 240 ) ); //czyszczenie bufora
        //clear_to_color(screen, makecol(10,10,10));
        //rest(20);
        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 ); //kopiowanie bufora na ekran
       
    }
   
    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();
P-104269
pekfos
» 2014-02-08 19:20:40
moja gra ma koszmarną wydajność.
Czyli?
P-104271
lelu0
Temat założony przez niniejszego użytkownika
» 2014-02-08 19:45:52
Mniej więcej 2 - 3 FPS, a momentami wręcz SPF :)
A poważnie - wciskam strzałkę, a przerz chwilę nie dzieje się nic, a potem kaczuszka materializuje się na drugim końcu planszy. W wersji 1 i 2 tego nie było, teraz mi się posypało, więc dlatego przypuszczenie że gdzieś coś sknociłem :)

Tutaj download link, jeszcze do działającej w miarę ok, ale nie idealnie wersji http://lelu0.net.pl/duck.htm
P-104275
« 1 »
  Strona 1 z 1