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

Pierwsza aplikacja

[lekcja] Rozdział 5. Opisuje zalecane postacie funkcji main, jak tworzy się okna w SFML 2.0 w trybie okienkowym i pełnoekranowym oraz jak zbudowana jest pętla główna programu.

Wprowadzenie

Jeżeli zwalczyłeś wszelkie problemy instalacyjne i przetestowałeś działanie biblioteki SFML 2.0 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 2.0 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 od systemu operacyjnego, 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

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 2.0. Pierwszą sprawą jaką należy omówić jest tworzenie okna aplikacji. Okno aplikacji tworzy się za pomocą klasy sf::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 2.0 - 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 sf::Window i jest nim 'Kurs SFML 2.0 - http://cpp0x.pl'.

Jeżeli nie chcemy tworzyć okna odrazu 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 sf::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 2.0 - 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 2.0 - 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 sf::Window, która zwraca informację czy okno jest otwarte. Metoda, która realizuje wspomnianą funkcjonalność posiada nazwę isOpen. Po drobnych więc modyfikacjach ostatecznie nasza główna pętla aplikacji może wyglądać tak:
C/C++
while( oknoAplikacji.isOpen() )
{
    //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 2.0 - http://cpp0x.pl" );
    while( oknoAplikacji.isOpen() )
    {
        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
Podstawy Obsługa zdarzeń - klawiatura, mysz i inne