Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Piotr Szawdyński
Biblioteki C++

Podstawy - pierwsza aplikacja SFML

[lekcja] Rozdział 2. Opisuje zalecane postacie funkcji main, jak tworzy się okna w SFML w trybie okienkowym i pełnoekranowym oraz jak zbudowana jest pętla główna programu.
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:
  • zalecane postacie funkcji main();
  • tworzenie okna SFML w trybie okienkowym i pełnoekranowym;
  • budowa pętli głównej programu.

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:
C/C++
int main()
{
    //tutaj nasz kod
    return 0;
}
oraz
C/C++
int main( int argc, char ** argv )
{
    //tutaj nasz kod
    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:
C/C++
#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:
C/C++
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ć:
C/C++
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:
C/C++
sf::Window oknoAplikacji;
//tu może być jakiś kod
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:
C/C++
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:
C/C++
for(;; )
{
    //tu Twój kod
    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:
C/C++
while( oknoAplikacji.IsOpened() )
{
    //tu Twój kod
    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:
C/C++
#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 :)
Poprzedni dokument Następny dokument
Instalacja SFML Obsługa zdarzeń - klawiatura, mysz i inne