Przyszedł czas aby omówić i przeanalizować, jak stworzyć okno za pomocą biblioteki Allegro 5.
Każdy program z użyciem tej biblioteki, należy rozpocząć od zaimportowania nagłówka części głównej oraz stworzenia głównej funkcji main.
#include <allegro5/allegro.h>
int main( int argc, char * argv[] )
{
return 0;
}
Zwróć uwagę na parametry funkcji
main. Są one wymagane przez bibliotekę Allegro dla prawidłowego działania. Argument
argc przechowuję liczbę argumentów które zostały wywołane z programem, domyślnie 1. Argument
argv przechowuję tablice napisów które są argumentami wywołania programu.
Znając jak wygląda szkielet każdego programu z tą biblioteką, należy go rozszerzyć. Jak już wcześnie wspominałem, musimy zainicjalizować bibliotekę specjalnym makrem.
#include <stdio.h>
#include <allegro5/allegro.h>
int main( int argc, char * argv[] )
{
if( !al_init() )
{
fprintf( stderr, "Failed to initialize allegro!\n" );
return - 1;
}
return 0;
}
Od razu dla sprawdzenia poprawności inicjalizacji, sprawdzamy co zwróci makro
al_init()
.
Powyższy kod uruchomi się, ale nadal nie pokaże się okno. Aby jednak stworzyć okno należy wywołać przeznaczoną do tego funkcję.
ALLEGRO_DISPLAY * al_create_display( int w, int h )
Powyższa funkcja pobiera dwa argumenty,
int w od słowa width czyli szerokość, oraz
int h od słowa height czyli wysokość. Jak się już zapewne domyślasz, chodzi o rozmiary okna. To nie wszystko, należy jeszcze odebrać wartość zwracaną przez nią. Funkcja allokuje pamięć dla okna, a następnie zwraca do niego wskaźnik. W razie błędu zwróci wartość
NULL.
Rozszerzamy kod:
#include <stdio.h>
#include <allegro5/allegro.h>
int main( int argc, char * argv[] )
{
ALLEGRO_DISPLAY * display = NULL;
if( !al_init() )
{
fprintf( stderr, "Failed to initialize allegro!\n" );
return - 1;
}
display = al_create_display( 640, 480 );
if( !display )
{
fprintf( stderr, "Failed to create display!\n" );
return - 1;
}
al_destroy_display( display );
return 0;
}
Zwróć uwagę że stworzyliśmy zmienną o nazwie display która jest wskaźnikiem na obiekt
ALLEGRO_DISPLAY z przypisaną wartością
NULL. Następnie stworzyliśmy ekran i obsłużyliśmy błąd. Przed zakończeniem programu zwalniamy pamięć funkcją
void al_destroy_display( ALLEGRO_DISPLAY * display )
Funkcja ta jako argument przyjmuje wskaźnik na ekran który ma być zniszczony. Jest to wymagane ponieważ możemy utworzyć parę okien, a zamknąć tylko jedno z nich i nadal korzystać z programu. Dlatego musimy jej powiedzieć które okno ma dla nas zniszczyć.
Już coraz lepiej, stworzyliśmy okno ale tylko błysło i program się zakończył. Chcielibyśmy coś więcej. Dlatego Wyczyścimy okno, wylewając do niego jednolity kolor. Następnie każemy programowi odczekać chwilę. Do tego celu użyjemy następujące funkcje.
void al_clear_to_color( ALLEGRO_COLOR color )
ALLEGRO_COLOR al_map_rgb( unsigned char r, unsigned char g, unsigned char b )
void al_flip_display( void )
void al_rest( double seconds )
Funkcja
al_clear_to_color()
, powoduje wyczyszczenie ekranu kolorem. Przyjmuje ona jako argument obiekt który przetrzymuje kolor. Aby taki obiekt utworzyć możemy skorzystać z funkcji
al_map_rgb()
. Za to ta funkcja pobiera od nas kolor w zapisie RGB. Dlatego jedną funkcje wpiszemy w drugą. Następnie będzie trzeba odświeżyć ekran funkcją
al_flip_display()
. Na końcu użyjemy funkcji
al_rest()
, aby odczekać trochę sekund. Zobaczmy jak to będzie wyglądać.
#include <stdio.h>
#include <allegro5/allegro.h>
int main( int argc, char * argv[] )
{
ALLEGRO_DISPLAY * display = NULL;
if( !al_init() )
{
fprintf( stderr, "Failed to initialize allegro!\n" );
return - 1;
}
display = al_create_display( 640, 480 );
if( !display )
{
fprintf( stderr, "Failed to create display!\n" );
return - 1;
}
al_clear_to_color( al_map_rgb( 20, 100, 150 ) );
al_flip_display();
al_rest( 10.0 );
al_destroy_display( display );
return 0;
}
Powyższy kod, jest już całkowicie sprawny i daje wyraźny efekt. Oczywiście funkcji które tworzą obiekt przetrzymujący kolor czyli
ALLEGRO_COLOR, jest wiele. W końcu mamy całą bibliotekę dla tego celu.
Czas jeszcze opowiedzieć trochę jak działa funkcja
al_flip_display()
. Biblioteka Allegro 5 została stworzona tak, aby wszystkie zmiany które wykonujemy najpierw trafiały na bufor. Następnie gdy zdecydujemy się je wyświetlić, używamy tej funkcji aby przekopiować zawartość bufora na ekran. To główna zasada działania tej funkcji.