W Allegro5 mamy modułową budowę elementów składowych biblioteki jedne nagłówki dodajemy przed innymi a więc: Link -> Przykłady z kursu.
#include <allegro5/allegro.h> - podstawowy plik nagłówkowy, dajemy go zawsze, zawarta w nim jest obsługa klawiatury i myszki, obsługa okna, itd.
#include <allegro5/allegro_primitives.h> - rysowanie linii, okręgów, trójkątów, kwadratów, itd.
#include <allegro5/allegro_image.h> -wyświetlanie i zapis obrazów BMP, PCX, TGA, JPEG, PNG.
#include <allegro5/allegro_font.h> - czcionka bitmapowa.
#include <allegro5/allegro_ttf.h> - czcionka ttf. (TrueType) (z #include <allegro5/allegro_font.h> )
#include <allegro5/allegro_color.h> - zmiana formatu kolorów rgb, cmyk, hsl, yuv, html.
#include <allegro5/allegro_audio.h> - odtwarzanie, zapis dźwięku.
#include <allegro5/allegro_acodec.h> - kodeki audio .wav, .flac, .ogg, .it, .mod,.s3m,.xm.(z #include <allegro5/allegro_audio.h> )
#include <allegro5/allegro_native_dialog.h> - tworzenie okien dialogowych.
#include <allegro5/allegro_opengl.h>
#include <allegro5/allegro_direct3d.h>
#include <allegro5/allegro_physfs.h> - odczyt plików .zip
#include <allegro5/allegro_memfile.h> - odczyt i zapis do pamięci komputera.
od Allegro5.1.0
#include <allegro5/allegro_video.h> - odczyt plików wideo
#include <allegro5/allegro_shader.h> - cieniowanie, vertex i pixel shader, GLSL, HLSL lub Cg.
Więcej informacji w kolejnych lekcjach.
KOLORY
ALLEGRO_COLOR al_map_rgb_f(float r, float g, float b)
ALLEGRO_COLOR al_map_rgba_f(float r, float g, float b, float a)
Przykłady:
al_map_rgb( 0, 128, 255); argumenty to liczby unsigned char czyli z zakresu od 0 do 255.
al_map_rgba( 0, 128, 255,255); tu jak wyżej plus kanał alpha ( 255 brak )
al_map_rgb_f( 0.0, 0.5, 1.0); argumenty to liczby float z zakresu 0.0f do 1.0f
al_map_rgba_f( 0.0, 0.5, 1.0, 1.0); tu jak wyżej plus kanał alpha ( 1.0f brak)
Możemy również utworzyć zmienną
ALLEGRO_COLOR czerwony = al_map_rgb( 255, 0, 0); - liczby typu unsigned char
ALLEGRO_COLOR zielony = al_map_rgb_f( 0.0, 1. 0, 0.0); - liczby typu float
Przykład.
// Program kolory i inicjowanie Allegro
#include <allegro5/allegro.h>
#include <allegro5\allegro_native_dialog.h>
ALLEGRO_DISPLAY *okno = NULL;
int main()
{
if(!al_init()) {
al_show_native_message_box(okno, "Błąd", "hej no co?",
"Nie mogę zainicjować Allegro5!\n weź się ogarnij!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
}
al_set_new_window_position(20,30);
al_set_new_display_flags(ALLEGRO_WINDOWED);
okno = al_create_display( 320, 240);
if(!okno) {
al_show_native_message_box(okno, "Błąd", "NULL",
"Nie mogę utworzyć okna!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
}
al_set_window_title( okno,"Kolory i inicjowanie Allegro5");
ALLEGRO_BITMAP *kwadrat, *prostokat= NULL;
kwadrat = al_create_bitmap(50,50);
prostokat= al_create_bitmap(100,50);
if(!kwadrat or !prostokat) {
al_show_native_message_box(okno, "Błąd", "Coś nie tak",
"Nie mogę utworzyć bitmap!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
}
al_set_target_bitmap(kwadrat);
al_clear_to_color(al_map_rgb(0,255,0));
al_set_target_bitmap(prostokat);
al_clear_to_color(al_map_rgb(255,0,0));
al_set_target_bitmap(al_get_backbuffer(okno));
al_clear_to_color(al_map_rgb_f(1.0,1.0,0.0));
al_draw_bitmap(kwadrat, 100, 100, 0);
al_draw_bitmap(prostokat,125, 125, 0);
al_flip_display();
al_rest(5.0);
al_destroy_display(okno); //usuwamy okno z pamięci i zwalniamy pamięć
return 0;
}
if(!al_init()) {
al_show_native_message_box(okno, "Błąd", "hej no co?",
"Nie mogę zainicjować Allegro5!\n weź się ogarnij!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
}
- plik nagłówkowy, inicjowanie i sprawdzenie czy można zainicjować Allegro5 za pomocą funkcji al_show_native_message_box - wcześniej dołączamy nagłówek #include<allegro5\allegro_native_dialog.h> w przypadku niepowodzenia zwraca NULL i wyświetla
Możemy również sprawdzać w konsoli dla C++
#include <iostream>
if(!al_init()){
std::cout << "Nie mozna zainicjowac Allegro5!" << std::endl;
getchar();
return 0;
}
else std::cout << "Zainicjowano Allegro5!\n" << std::endl;
zamykać konsole klawiszem enter lub escape.
lub dla C:
#include <stdio.h>
if(!al_init()){
fprintf(stderr, "Nie mozna zainicjowac Allegro5!");
return -1;
}
else fprintf(stderr, "Zainicjowano Allegro5!\n");
Gdy nie chcemy sprawdzać dajemy po prostu: al_init(); - kończymy średnikiem.
al_set_new_window_position(20,30); - pozycja okna na ekranie.
al_set_new_display_flags - flagi jakie udostępnia Allegro5:
al_set_new_display_flags(ALLEGRO_WINDOWED); - Ekran w trybie okienkowym
al_set_new_display_flags(ALLEGRO_RESIZABLE | ALLEGRO_WINDOWED ); - Ekran w trybie okienkowym + zmiana rozmiaru + przycisk maksymalizacji resizable (tylko w połączeniu z ALLEGRO_WINDOWED).
al_set_new_display_flags(ALLEGRO_FULLSCREEN); - Ekran w trybie pełnoekranowym.
al_set_new_display_flags(ALLEGRO_NOFRAME); - Okno bez ramki (tj. nie ma granicy (ramki) lub paska tytułowego).
al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW); - Ekran trybie pełnoekranowym - rozdzielczość zależna od wielkości ekranu na pulpicie (bez względu na to co wpiszemy do "al_create_display").
al_set_new_display_flags(ALLEGRO_OPENGL);
al_set_new_display_flags(ALLEGRO_OPENGL_3_0);
al_set_new_display_flags(ALLEGRO_DIRECT3D);
al_set_new_display_flags(ALLEGRO_OPENGL_FORWARD_COMPATIBLE);
al_set_new_display_flags(ALLEGRO_GENERATE_EXPOSE_EVENTS);
ALLEGRO_DISPLAY *okno = NULL; - tworzymy wskaźnik do naszego ekranu, który nazwaliśmy sobie okno.
Istnieje możliwość utworzenia więcej niż jednego okna, wystarczy podać inną nazwę.
okno = al_create_display( 320, 240); - utworzenie okna o podanych wymiarach.
if(!okno) {
al_show_native_message_box(okno, "Błąd", "Błąd", "Dodaj\nal_create_display\nLub\nDostosuj rozdzielczość",
"Bo nie mogę utworzyć okna!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
} - sprawdzenie czy można utworzyć okno, w przypadku braku możliwości, zwróci false.
al_set_window_title( okno,"Kolory i inicjowanie Allegro5"); // tytuł okna.
ALLEGRO_BITMAP *kwadrat, *prostokat= NULL; // wskaźniki do bitmap
kwadrat = al_create_bitmap(50,50); // rozmiar bitmapy
prostokat= al_create_bitmap(100,50); // rozmiar bitmapy
if(!kwadrat or !prostokat) {
al_show_native_message_box(okno, "Błąd", "Coś nie tak",
"Nie mogę utworzyć bitmap!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
} - sprawdzenie czy można utworzyć bitmapy, w przypadku braku możliwości, zwróci false.
al_set_target_bitmap(kwadrat);
al_clear_to_color(al_map_rgb(0,255,0)); // nadajemy dany kolor każdej bitmapie
al_set_target_bitmap(prostokat);
al_clear_to_color(al_map_rgb(255,0,0));
al_set_target_bitmap(al_get_backbuffer(okno)); // powracamy do naszego okna
al_clear_to_color(al_map_rgb_f(1.0,1.0,0.0)); // czyści okno podanym kolorem.
al_draw_bitmap(kwadrat, 100, 100, 0); // wyświetlamy nasz kwadrat pozycja x i y
al_draw_bitmap(prostokat,125, 125, 0); // tu również, trzeci parametr to obrócenie i odwrócenie 0,1,2,3.
al_flip_display(); // wyświetlamy wszystko na ekran
al_rest(5.0); // jako że nie znamy jeszcze obsługi klawiatury, aby zamknąć nasz program, dajemy pauzę 5 sekund i program się zamyka.
al_destroy_display(okno); // usuwamy okno z pamięci i zwalniamy pamięć
#include <allegro5/allegro.h> - podstawowy plik nagłówkowy, dajemy go zawsze, zawarta w nim jest obsługa klawiatury i myszki, obsługa okna, itd.
#include <allegro5/allegro_primitives.h> - rysowanie linii, okręgów, trójkątów, kwadratów, itd.
#include <allegro5/allegro_image.h> -wyświetlanie i zapis obrazów BMP, PCX, TGA, JPEG, PNG.
#include <allegro5/allegro_font.h> - czcionka bitmapowa.
#include <allegro5/allegro_ttf.h> - czcionka ttf. (TrueType) (z #include <allegro5/allegro_font.h> )
#include <allegro5/allegro_color.h> - zmiana formatu kolorów rgb, cmyk, hsl, yuv, html.
#include <allegro5/allegro_audio.h> - odtwarzanie, zapis dźwięku.
#include <allegro5/allegro_acodec.h> - kodeki audio .wav, .flac, .ogg, .it, .mod,.s3m,.xm.(z #include <allegro5/allegro_audio.h> )
#include <allegro5/allegro_native_dialog.h> - tworzenie okien dialogowych.
#include <allegro5/allegro_opengl.h>
#include <allegro5/allegro_direct3d.h>
#include <allegro5/allegro_physfs.h> - odczyt plików .zip
#include <allegro5/allegro_memfile.h> - odczyt i zapis do pamięci komputera.
od Allegro5.1.0
#include <allegro5/allegro_video.h> - odczyt plików wideo
#include <allegro5/allegro_shader.h> - cieniowanie, vertex i pixel shader, GLSL, HLSL lub Cg.
Więcej informacji w kolejnych lekcjach.
KOLORY
W Allegro5 do reprezentacji kolorów mamy strukturę w skład której wchodzą trzy lub cztery argumenty:
ALLEGRO_COLOR al_map_rgb( unsigned char r, unsigned char g, unsigned char b)
ALLEGRO_COLOR al_map_rgba(unsigned char r, unsigned char g, unsigned char b, unsigned char a)ALLEGRO_COLOR al_map_rgb( unsigned char r, unsigned char g, unsigned char b)
ALLEGRO_COLOR al_map_rgb_f(float r, float g, float b)
ALLEGRO_COLOR al_map_rgba_f(float r, float g, float b, float a)
Przykłady:
al_map_rgb( 0, 128, 255); argumenty to liczby unsigned char czyli z zakresu od 0 do 255.
al_map_rgba( 0, 128, 255,255); tu jak wyżej plus kanał alpha ( 255 brak )
al_map_rgb_f( 0.0, 0.5, 1.0); argumenty to liczby float z zakresu 0.0f do 1.0f
al_map_rgba_f( 0.0, 0.5, 1.0, 1.0); tu jak wyżej plus kanał alpha ( 1.0f brak)
Możemy również utworzyć zmienną
ALLEGRO_COLOR czerwony = al_map_rgb( 255, 0, 0); - liczby typu unsigned char
ALLEGRO_COLOR zielony = al_map_rgb_f( 0.0, 1. 0, 0.0); - liczby typu float
Przykład.
// Program kolory i inicjowanie Allegro
#include <allegro5/allegro.h>
#include <allegro5\allegro_native_dialog.h>
ALLEGRO_DISPLAY *okno = NULL;
int main()
{
if(!al_init()) {
al_show_native_message_box(okno, "Błąd", "hej no co?",
"Nie mogę zainicjować Allegro5!\n weź się ogarnij!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
}
al_set_new_window_position(20,30);
al_set_new_display_flags(ALLEGRO_WINDOWED);
okno = al_create_display( 320, 240);
if(!okno) {
al_show_native_message_box(okno, "Błąd", "NULL",
"Nie mogę utworzyć okna!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
}
al_set_window_title( okno,"Kolory i inicjowanie Allegro5");
ALLEGRO_BITMAP *kwadrat, *prostokat= NULL;
kwadrat = al_create_bitmap(50,50);
prostokat= al_create_bitmap(100,50);
if(!kwadrat or !prostokat) {
al_show_native_message_box(okno, "Błąd", "Coś nie tak",
"Nie mogę utworzyć bitmap!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
}
al_set_target_bitmap(kwadrat);
al_clear_to_color(al_map_rgb(0,255,0));
al_set_target_bitmap(prostokat);
al_clear_to_color(al_map_rgb(255,0,0));
al_set_target_bitmap(al_get_backbuffer(okno));
al_clear_to_color(al_map_rgb_f(1.0,1.0,0.0));
al_draw_bitmap(kwadrat, 100, 100, 0);
al_draw_bitmap(prostokat,125, 125, 0);
al_flip_display();
al_rest(5.0);
al_destroy_display(okno); //usuwamy okno z pamięci i zwalniamy pamięć
return 0;
}
Opis:
#include <allegro5/allegro.h> if(!al_init()) {
al_show_native_message_box(okno, "Błąd", "hej no co?",
"Nie mogę zainicjować Allegro5!\n weź się ogarnij!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
}
- plik nagłówkowy, inicjowanie i sprawdzenie czy można zainicjować Allegro5 za pomocą funkcji al_show_native_message_box - wcześniej dołączamy nagłówek #include<allegro5\allegro_native_dialog.h> w przypadku niepowodzenia zwraca NULL i wyświetla
Możemy również sprawdzać w konsoli dla C++
#include <iostream>
if(!al_init()){
std::cout << "Nie mozna zainicjowac Allegro5!" << std::endl;
getchar();
return 0;
}
else std::cout << "Zainicjowano Allegro5!\n" << std::endl;
zamykać konsole klawiszem enter lub escape.
lub dla C:
#include <stdio.h>
if(!al_init()){
fprintf(stderr, "Nie mozna zainicjowac Allegro5!");
return -1;
}
else fprintf(stderr, "Zainicjowano Allegro5!\n");
Gdy nie chcemy sprawdzać dajemy po prostu: al_init(); - kończymy średnikiem.
al_set_new_window_position(20,30); - pozycja okna na ekranie.
al_set_new_display_flags - flagi jakie udostępnia Allegro5:
al_set_new_display_flags(ALLEGRO_WINDOWED); - Ekran w trybie okienkowym
al_set_new_display_flags(ALLEGRO_RESIZABLE | ALLEGRO_WINDOWED ); - Ekran w trybie okienkowym + zmiana rozmiaru + przycisk maksymalizacji resizable (tylko w połączeniu z ALLEGRO_WINDOWED).
al_set_new_display_flags(ALLEGRO_FULLSCREEN); - Ekran w trybie pełnoekranowym.
al_set_new_display_flags(ALLEGRO_NOFRAME); - Okno bez ramki (tj. nie ma granicy (ramki) lub paska tytułowego).
al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW); - Ekran trybie pełnoekranowym - rozdzielczość zależna od wielkości ekranu na pulpicie (bez względu na to co wpiszemy do "al_create_display").
al_set_new_display_flags(ALLEGRO_OPENGL);
al_set_new_display_flags(ALLEGRO_OPENGL_3_0);
al_set_new_display_flags(ALLEGRO_DIRECT3D);
al_set_new_display_flags(ALLEGRO_OPENGL_FORWARD_COMPATIBLE);
al_set_new_display_flags(ALLEGRO_GENERATE_EXPOSE_EVENTS);
ALLEGRO_DISPLAY *okno = NULL; - tworzymy wskaźnik do naszego ekranu, który nazwaliśmy sobie okno.
Istnieje możliwość utworzenia więcej niż jednego okna, wystarczy podać inną nazwę.
okno = al_create_display( 320, 240); - utworzenie okna o podanych wymiarach.
if(!okno) {
al_show_native_message_box(okno, "Błąd", "Błąd", "Dodaj\nal_create_display\nLub\nDostosuj rozdzielczość",
"Bo nie mogę utworzyć okna!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
} - sprawdzenie czy można utworzyć okno, w przypadku braku możliwości, zwróci false.
ALLEGRO_BITMAP *kwadrat, *prostokat= NULL; // wskaźniki do bitmap
kwadrat = al_create_bitmap(50,50); // rozmiar bitmapy
prostokat= al_create_bitmap(100,50); // rozmiar bitmapy
if(!kwadrat or !prostokat) {
al_show_native_message_box(okno, "Błąd", "Coś nie tak",
"Nie mogę utworzyć bitmap!",
NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
} - sprawdzenie czy można utworzyć bitmapy, w przypadku braku możliwości, zwróci false.
al_set_target_bitmap(kwadrat);
al_clear_to_color(al_map_rgb(0,255,0)); // nadajemy dany kolor każdej bitmapie
al_set_target_bitmap(prostokat);
al_clear_to_color(al_map_rgb(255,0,0));
al_set_target_bitmap(al_get_backbuffer(okno)); // powracamy do naszego okna
al_clear_to_color(al_map_rgb_f(1.0,1.0,0.0)); // czyści okno podanym kolorem.
al_draw_bitmap(kwadrat, 100, 100, 0); // wyświetlamy nasz kwadrat pozycja x i y
al_draw_bitmap(prostokat,125, 125, 0); // tu również, trzeci parametr to obrócenie i odwrócenie 0,1,2,3.
al_flip_display(); // wyświetlamy wszystko na ekran
al_rest(5.0); // jako że nie znamy jeszcze obsługi klawiatury, aby zamknąć nasz program, dajemy pauzę 5 sekund i program się zamyka.
al_destroy_display(okno); // usuwamy okno z pamięci i zwalniamy pamięć