No dobra... dzisiaj to już zaszalejemy... na całego ;)] Nauczymy się wyświetlać grafikę! To już nie lada wstęp do napisania własnej gry. Otóż, aby wyświetlić jakąś grafikę w Allegro, należy:
zadeklarować wskaźnik typu BITMAP
załadować obrazek do pamięci
i... wyświetlić obrazek ! ;)
Jak widzimy, nie ma w tym nic trudnego... aha... zapomniałem o jednym..., aby wyświetlić obrazek musimy go... mieć :] więc narysujmy sobie jakiś obrazek w Paintcie, u mnie jest to ludzik 40x40 pix, zapisany jako ludek.bmp, plik umieszczamy w tym samym katalogu gdzie nasz projekt! ... A więc do roboty! Oto nasz kodzik:
#include <allegro.h>
int main()
{
allegro_init();
install_keyboard();
set_color_depth( 16 );
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0 );
clear_to_color( screen, makecol( 128, 128, 128 ) );
Deklarujemy wskaźniki do naszych BITMAP :
BITMAP * ludek = NULL;
Ładujemy obrazek do pamięci :
ludek = load_bmp( "ludek.bmp", default_palette );
if( !ludek )
{
set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
allegro_message( "nie mogę załadować obrazka Ludek !" );
allegro_exit();
return 0;
}
No i... oczywiście wyświetlamy nasz obrazek!
blit( ludek, screen, 0, 0, 100, 100, ludek->w, ludek->h );
readkey();
Po zabawie na BITMAPach musimy zwolnić pamięć przez nie zajmowaną:
destroy_bitmap( ludek );
No, i jak zwykle na końcu zamykamy Allegro ;)
allegro_exit();
return 0;
}
END_OF_MAIN();
Jak widzicie jest to praktycznie ten sam kodzik co poprzednio... jedyna różnica polega na tym, że teraz zamiast tworzyć bitmapę po prostu ją wczytujemy za pomocą funkcji:
ludek = load_bmp("ludek.bmp",default_palette);
Jej jedynymi argumentami są : ścieżka do pliku wraz z jego nazwą, oraz paleta kolorów... najbezpieczniej dać tu zawsze default_palette i spokój... ;]
Jeśli nie lubimy Windowsowego formatu .BMP możemy używać pokrewnych funkcji:
Jednak do usuwania przydzielonej pamięci spod wskaźnika używamy zawsze destroy_bitmap.
Obrazek bez tła
Dobra... z wyświetlaniem obrazka nie ma problemu... ale czy zauważyliście, że nasz obrazek został wyświetlony razem z tłem ? Wygląda to naprawdę koszmarnie, aby temu zapobiec musimy zrobić dwie rzeczy:
Po pierwsze tło naszego obrazka powinno być różowe ( koszmarny kolor ;) ( maximum czerwonego i niebieskiego, 0 zielonego )) kolor ten ma wzór makecol(255,0,255); A więc wypełnijmy tło naszego obrazka tym kolorem.
Po drugie zamiast funkcji blit użyjemy masked_blit, dodajmy ją do powyższego kodu zaraz pod funkcją blit:
masked_blit( ludek, screen, 0,0, 200,100, ludek->w, ludek->h);
Funkcja ta jest bardzo podobna do funkcji
blit, ma dokładnie te same argumenty, dlatego nie będę ich wyjaśniał. Najważniejsze w tej funkcji jest to, że kopiuje ona prostokątny wycinek pomijając kolor tła, dla trybu 8 bitowego ( 256 kolorów ) jest to barwa czarna czyli kolor o numerze 0. Dla trybów o wyższej głębi kolorów jest to kolor ostro różowy w formacie RGB ma numer 255,0,255.
Zrzut ekranu
Allegro umożliwia nam jeszcze jedną ciekawą funkcję, mianowicie zapisywanie obrazków do pliku. Możemy wybrać jeden z trzech formatów : BMP, TGA, PCX. Aby zapisać ekran z naszego programu używamy funkcji:
save_bitmap("ekran.bmp", screen, default_palette);
Jej argumentami są: nazwa pliku, bitmapa oraz paleta kolorów. Możemy używać również funkcji pokrewnych: save_bmp, save_pcx, save_tga, wtedy w nazwie pliku nie podajemy rozszerzenia.
Kody źródłowe programów
Zadania do tej i innych lekcji znajdziesz
na naszym repozytorium.
Prawa autorskie
Serwis otrzymał zgodę od autora na publikację niniejszego materiału.