Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania i odpowiedzi
Viewing all articles
Browse latest Browse all 83216

Kłopot z animacją w Allegro 4.x C++

$
0
0

Cześć :) od jakiegoś czasu uczę się programowania w c++ i jestem teraz na etapie nauki w bibliotece graficznej. Przy próbie zrobienia prostej animacji (samochód jeżdżący po ekranie) po kilku sekundach takiej jazdy wyskakuje błąd i program się wyłącza. Nie mam w tej bibliotece wielkiego doświadczenia więc nie wiem gdzie szukać błędu. Liczę, na podpowiedź co jest przyczyną tego wyłączania się aplikacji. Zamieszczam owy nieszczęsny kod i proszę o pomoc :)

P.S. Potrzebna jest grafika o nazwie samochod.bmp w folderze.

 

#include <allegro.h>
#include <math.h>
#include <winalleg.h>

double x=100, y=100; // pozycja samochodu
int kat=0; // kat o jaki jest obrocony samochod w stopniach
double delta_x=1, delta_y=0; // przyrosty pozycji samochodu w trakcie jazdy zależne od kata


void wyswietl()
{
    BITMAP * bufor = NULL;
    bufor = create_bitmap( 1024, 768 );

    BITMAP * samochod = NULL;
    samochod = load_bmp( "samochod.bmp", default_palette );

    clear_to_color( bufor, 100 );

    fixed kat_obrotu = kat * 256 / 360.0; // zamiana kata z stopni na zapis liczbowy stosowany przez funkcje rotate_sprite 
    rotate_sprite( bufor, samochod, x, y, ftofix( kat_obrotu ) ); // kopiowanie bitmapy samochod obrocona o odpowiedni kat do bitmapy bufor 

    blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h );
}

void glowna()
{
    while( !key[ KEY_ESC ] )
    {
        Sleep(15);
        wyswietl();

        if ( key[ KEY_UP ] )
        {
            x+=delta_x*10;
            y+=delta_y*10;

            if ( key[ KEY_LEFT ] )
                kat-=5;

            if ( key[ KEY_RIGHT ] )
                kat+=5;
        }

        delta_x = cos( kat * M_PI / 180 );
        delta_y = sin( kat * M_PI / 180 );
    }
}

int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 32 );
    set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 1024, 768, 0, 0 );
    set_palette( default_palette );

    glowna();

    readkey();

    allegro_exit();
    return 0;
}
END_OF_MAIN();

 


Viewing all articles
Browse latest Browse all 83216