Allegro5 część 1 - Witaj Świecie! Projekt, inicjalizacja, tworzenie okna, czcionki. Autor: Kamil Krzyszczuk - C mons 1.Wstęp Witam w pierwszej części mojego kursu za pomocą którego dowiesz się jak stworzyć pierwszy program uŝywając allegro5. Allegro5 to biblioteka pozwalająca na rysowanie grafiki: bitmap, czcionek, prymitywów ale teŝ daje moŝliwość obsługi klawiatury czy myszki a takŝe timer ów i wiele innych. Biblioteka ta jest wciąŝ rozwijana ale na obecną chwilę da się juŝ coś porządnego stworzyć za jej uŝyciem. Pisząc ten kurs uŝywałem wersji allegro 4.9.11 i kompilatora Microsoft Visual Studio 2008. W kolejnych częściach dowiesz się jak korzystać z innych dóbr tej biblioteki, ta część ma na celu pomoc przy instalacji allegro i stworzeniu pierwszego projektu. Następnie naszym celem będzie stworzenie okna/wyświetlacza i na samym końcu tej części wczytamy czcionkę i wyświetlimy w oknie jakiś napis. No to zaczynamy. :) 2.Instalacja Moglibyśmy od razu przejść do tworzenia projektu ale czegoś nam brakuje. Brakuje nam niezbędnych nagłówków i bibliotek. Gotową binarke i nagłówki znajdziemy tutaj: http://allegro5.org/index.php?option=com_phocadownload&view=category&id=6:allegro-4.9.11- binaries&itemid=53. Pobieramy ten plik allegro-4.9.11-msvc-bin.zip rozpakowujemy go i odpowiednie foldery ładujemy do kompilatora. Czyli kolejno kopiujemy dwa foldery include i lib następnie udajemy się do miejsca gdzie mamy zainstalowany kompilator. W moim przypadku jest to taki adres: C:\Program Files\Microsoft Visual Studio 9.0\VC i wklejamy uprzednio skopiowane foldery. Kiedy system zapyta nas o jakąś zamianę folderów to potwierdzamy. Zawartość folderu dll musimy zaś skopiować do C:\Program Files\Microsoft Visual Studio 9.0\VC\bin Jeśli mamy juŝ wszystkie potrzebne pliki w kompilatorze to moŝemy przystąpić do utworzenia projektu. 3. Pierwszy projekt Jeśli wiesz jak stworzyć Aplikacje Win32 Console Application moŝesz pominąć tą część i przejść do 4 punktu. Jeśli zaś nie wiesz jak - to czytaj dalej. Włącz kompilator. Wybierz z górnej sekcji listę File następnie New i Project. PokaŜe ci się okno:
Wybierz typ projektu Win32 Console Application. Następnie podaj nazwę projektu. Jak juŝ ją wpiszesz to zatwierdź wszystko przyciskiem OK. W tym oknie potwierdź wybór i przejdź do dalszych ustaleń naszego projektu klikając na przycisk Next.
W następnym oknie wybierz pusty projekt. W tym celu zaznacz pole Empty Project. Kiedy juŝ wszystko jest ustalone, zakończ tworzenie projektu klikając na przycisk Finish. Teraz dodamy pierwszym moduł, klikając z lewej strony na folder Source Files prawym przyciskiem, wybierz z listy która się pokazała pole Add a następnie New Item i dodaj plik C++ File (.cpp) następnie nadaj mu jakąś nazwę, chociaŝby main i zatwierdź przyciskiem Add. 4. Program. A więc doszliśmy juŝ do momentu w którym napiszemy pierwszy program jeszcze tylko jedna waŝna sprawa. Musimy dodać biblioteki lib. W tym celu naciśnij alt+f7 lub przejdź do górnej sekcji Project następnie do MojProject Properties. W zakładce Configuration Properties/Linker/Input w polu Additional Dependencies wpisz/dopisz kolejno oddzielając spacją 3 pliki lib: allegro-4.9.11.lib a5_font-4.9.11.lib a5_ttf-4.9.11.lib Nadszedł czas na kod, najpierw go przedstawię a potem po kolei przeanalizujemy co robi kaŝda linijka. #include <allegro5/allegro5.h> #include <allegro5/a5_font.h> #include <allegro5/a5_ttf.h> #include <iostream> #undef main void main() al_init(); al_init_font_addon();
5.Analiza. al_install_keyboard(); if (!al_create_display(640,480) ) std::cout << "Nie udalo sie utworzyc okna!" << std::endl; al_set_window_title("kurs Allegro Pierwszy program, czcionki."); ALLEGRO_FONT* font; font = al_load_ttf_font( "times.ttf", 48, 0 ); if (!font ) std::cout << "Nie udalo sie wczytac czcionki!" << std::endl; ALLEGRO_KEYBOARD_STATE key_state; while(!al_key_down(&key_state, ALLEGRO_KEY_ESCAPE)) al_clear_to_color( al_map_rgb(0,0,0) ); al_draw_text( font, 320, 216, ALLEGRO_ALIGN_CENTRE, "Witaj swiecie!" ); al_flip_display(); #include <allegro5/allegro5.h> #include <allegro5/a5_font.h> #include <allegro5/a5_ttf.h> #include <windows.h> Jak widać najpierw dołączamy potrzebne nam nagłówki. al_init(); Następnie za pomocą tejŝe funkcji ( a raczej makry ) instalujemy allegro. al_init_font_addon(); Ta funkcja instaluje system czcionek. if (!al_create_display(640,480) ) std::cout << "Nie udalo sie utworzyc okna!" << std::endl; Ten fragment kodu tworzy okno i sprawdza czy ta czynność się udała. W razie niepowodzenia informuje o tym komunikatem czeka na naciśnięcie ENTER i wychodzi z głównej funkcji main czego następstwem jest wyjście z programu. al_set_window_title("kurs Allegro Pierwszy program, czcionki."); W tej linijce jest funkcja, która zmienia nazwę okna. Jej parametr to const char *title przyjmujący tekst który ma być nazwą okna. ALLEGRO_FONT* font; Tworzy wskaźnik na czcionkę.
font = al_load_ttf_font( "times.ttf", 48, 0 ); Ta linijka wczytuje czcionkę i zwraca wskaźnik na nią do wskaźnika font. Parametry funkcji al_load_ttf_font to: char const *filename int size int flags ŚcieŜka do pliku/czcionki PoŜądany rozmiar czcionki Flagi Póki co allegro oferuje jedną flagę przy wczytywaniu czcionek: ALLEGRO_TTF_NO_KERNING Z tą flagą wczytana czcionka nie będzie posiadała zregulowanej odległości miedzy znakami. http://pl.wikipedia.org/wiki/kerning if (!font ) std::cout << "Nie udalo sie wczytac czcionki!" << std::endl; Ten fragment kodu sprawdza czy wczytanie czcionki powiodło się. Jeśli nie to wyświetla odpowiedni komunikat czeka na ENTER po czym wychodzi z głównej funkcji main czego następstwem jest wyjście z programu jak wcześniej. ALLEGRO_KEYBOARD_STATE key_state; Tworzy obiekt który przechowuje stan klawiatury. Pobiera aktualny stan klawiatury. al_key_down(&key_state, ALLEGRO_KEY_ESCAPE)) To jest funkcja która informuje (zwraca wartość ) czy dany klawisz jest wciśnięty jej parametry to: const ALLEGRO_KEYBOARD_STATE *state int keycode Wskaźnik na stan klawiatury Kod klawisza Wszystkie kody klawiszów znajdziesz w dokumentacji a konkretnie tutaj: http://alleg.sourceforge.net/a5docs/refman/keyboard.html#toc-key-codes while(!al_key_down(&key_state, ALLEGRO_KEY_ESCAPE)) al_clear_to_color( al_map_rgb(0,0,0) ); al_draw_text( font, 320, 216, ALLEGRO_ALIGN_CENTRE, "Witaj swiecie!" ); al_flip_display(); Pętla która wykonuje się do momentu kiedy uŝytkownik naciśnie klawisz ESC. al_map_rgb(0,0,0) Funkcja która zwraca kolor, jej argumenty to kolejno unsigned char R, G, B czyli nasycenie Czerwonego, Zielonego i Niebieskiego koloru. Po inne wersje tejŝe funkcji odsyłam do dokumentacji: http://alleg.sourceforge.net/a5docs/refman/color.html
al_clear_to_color( al_map_rgb(0,0,0) ); Czyści bufor ekranu ( bitmapę ) na podany kolor. Pewnie dziwi Cię fakt, Ŝe nie podajemy którą bitmapę ma wyczyścić tak jak to miało miejsce w starszej wersji allegro. OtóŜ do tego słuŝy specjalna funkcja al_set_target_bitmap która jako parametr przyjmuje wskaźnik na bitmapę na której mają odbywać się wszelakie procesy renderowania. Kiedy chcemy zmienić bitmapę na której mamy zamiar coś narysować, po prostu ponownie uŝywamy tej funkcji. W naszym programie jej nie uŝyliśmy, poniewaŝ domyślnie ustawiony jest backbuffer czyli ogólny bufor ekranu. al_draw_text( font, 320, 216, ALLEGRO_ALIGN_CENTRE, "Witaj swiecie!" ); Funkcja rysującą tekst na ekranie, jej parametry to kolejno: const ALLEGRO_FONT *font float x float y int flags char const *text Wskaźnik na czcionkę Współrzędna X połoŝenia na ekranie Współrzędna Y połoŝenia na ekranie Flagi tekst który ma zostać narysowany Dostępne flagi dla tej funkcji: ALLEGRO_ALIGN_LEFT ALLEGRO_ALIGN_RIGHT ALLEGRO_ALIGN_CENTRE Rysuje tekst wyrównany do lewej strony. Efekt uzyskamy równieŝ nie podając Ŝadnej flagi czyli wpisując NULL. Rysuje tekst wyrównany do prawej strony. Rysuje wycentrowany tekst. al_flip_display(); Ta funkcja wysyła zawartość backbuffer a do okna. Funkcja ta powinna występować zawsze po wyrenderowaniu czegokolwiek ( ale nie po kaŝdej jednej graficzce ). I to wszystko. Program tworzy okno, wyświetla na ekranie napis Witaj Swiecie i czeka na naciśnięcie klawisza ESC po czym kończy swoje działanie. To koniec tej części kursu. Zapraszam do kolejnej i do dokumentacji allegro5 w wersji angielskiej: http://alleg.sourceforge.net/a5docs/refman/index.html