Jeżeli zwalczyłeś wszelkie problemy instalacyjne i przetestowałeś działanie biblioteki SFML to ze spokojnym sumieniem możesz kontynuować czytanie niniejszego rozdziału. Rozdział ten skoncentruje się na podstawach SFML’a takich jak:
Funkcja główna programu
Pracując z biblioteką SFML możemy korzystać ze wszystkich znanych postaci funkcji głównej main. Są jednak postacie, które są preferowane - są one bowiem uniwersalne i niezależne systemów operacyjnych pod którym będzie kod kompilowany. Postacie te są następujące:
oraz
int main( int argc, char ** argv )
{
return 0;
}
Druga postać funkcji umożliwia pobieranie parametrów przekazanych poprzez wiersz poleceń - jeżeli z nich nie korzystasz to możesz ze spokojnym sumieniem używać pierwszej postaci funkcji main.
Tworzenie okna aplikacji SFML
Skoro wiesz już jak powinna wyglądać funkcja główna programu to można się w końcu zabrać za właściwą naukę biblioteki SFML. Pierwszą sprawą jaką należy omówić jest tworzenie okna aplikacji. Okno aplikacji tworzy się za pomocą klasy
Window umieszczonej w przestrzeni nazw
sf. Plik nagłówkowy, który należy dołączyć to:
#include <SFML/Window.hpp>
Utworzenie okna SFML odbywa się więc poprzez utworzenie zmiennej typu
sf::Window oraz jednoczesne przekazanie odpowiednich argumentów do konstruktora tworzonego obiektu. Przykładowe utworzenie okna może więc wyglądać tak:
sf::Window oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
Powyższy zapis utworzy nam okno SFML o szerokości 800px i wysokości 600px z 32 bitową głębią kolorów. Tytuł okna został określony przez drugi argument klasy
Window i jest nim
'Kurs SFML - http://cpp0x.pl'.
Jeżeli nie chcemy tworzyć okna od razu, to możemy utworzyć obiekt okna bez podawania argumentów konstruktorowi, czyli po prostu napisać:
sf::Window oknoAplikacji;
Okno można utworzyć później poprzez wywołanie metody
Create należącej do klasy
Window. Przykładowe wywołanie, które będzie równoważne do pierwszego omówionego zapisu będzie wyglądało tak:
sf::Window oknoAplikacji;
oknoAplikacji.Create( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
Myślę, że argumenty metody
Create nie wymagają już wyjaśnienia i wiadomo jakie mają one znaczenie :)
Okno w trybie pełnoekranowym
Jeżeli ucząc się biblioteki myślisz przede wszystkim o tworzeniu gier to zapewne chciałbyś mieć możliwość uruchamiania aplikacji w trybie pełnoekranowym. W SFML jest to bardzo proste - wystarczy podać jako trzeci argument wcześniej omówionego konstruktora flagę stylu
sf::Style::Fullscreen. Pełne wywołanie tworzące okno w trybie pełnoekranowym będzie więc wyglądało tak:
sf::Window oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl", sf::Style::Fullscreen );
Jak widać nie było to trudne i nie wymagało dużego nakładu pracy :)
Pętla główna programu
Jeżeli miałeś już styczność z pisaniem gier, aplikacji okienkowych czy też bardziej złożonych aplikacji konsolowych to zapewne wiesz, że w programie musi istnieć coś takiego jak główna pętla aplikacji. Wewnątrz takiej pętli umieszczamy kod, który ma się stale wykonywać, czyli może być to np. rysowanie postaci, którą co i rusz rysujemy na nowej pozycji w każdym kolejnym przebiegu pętli. Zanim jednak dojdziemy do rysowania czegokolwiek na ekranie, zobaczmy jak wygląda pętla główna programu:
for(;; )
{
oknoAplikacji.Display();
}
W powyższym kodzie została utworzona nieskończona pętla wewnątrz której znajduje się metoda
Display, która odpowiada za wyświetlanie okna SFML. Wyjście z pętli nieskończonej możemy wykonać poprzez użycie słowa kluczowego
break, jednak nie jest to konieczne - możemy bowiem wykorzystać inną metodę klasy
Window, która zwraca informację czy okno jest otwarte. Metoda, która realizuje wspomnianą funkcjonalność posiada nazwę
IsOpened. Po drobnych więc modyfikacjach ostatecznie nasza główna pętla aplikacji może wyglądać tak:
while( oknoAplikacji.IsOpened() )
{
oknoAplikacji.Display();
}
Kompletny kod aplikacji
Na zakończenie warto jeszcze zobaczyć jak będzie wyglądał kod całej aplikacji złożony z elementów, które zostały tu omówione:
#include <SFML/Window.hpp>
int main()
{
sf::Window oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
while( oknoAplikacji.IsOpened() )
{
oknoAplikacji.Display();
}
return 0;
}
Powyższy kod nie jest jeszcze kompletny, bowiem nie posiada on obsługi zamykania okna SFML - w konsekwencji nie da się zamknąć okna aplikacji przez co wymagane będzie zabicie procesu poprzez menedżer zadań Windows. W kolejnym rozdziale kod zostanie uzupełniony o brakującą funkcjonalność zamykania okna, tak więc zapraszam do zapoznania się z kolejnym rozdziałem :)