Zainteresowałem się ostatnio biblioteką SFML. Jest to dość prosta w obsłudze biblioteka do obsługi grafiki, dźwięku,sieci… Jest dostępna zarówno na Windowsa, jak i na Linuksa oraz MAC OS X. Stanowi według mnie niezłą konkurencję dla SDL czy Allegro 🙂
Postanowiłem zacząć opisywać co jakiś czas podstawy tej biblioteki. Jak się może łatwo domyślić, na stronie projektu dostępne są tutoriale po angielsku, ale nie każdy musi umieć/chcieć czytać w tym języku. Wśród programistów to raczej powinna występować ta dru… Tfu, co ja plotę – programista gier powinien umieć i chcieć czytać po angielsku 🙂 Ale do rzeczy – będę się mocno wzorował tutorialami ze strony SFML’a, ale postaram się także dorzucać jakieś refleksje od siebie :p
Zaczynajmy więc!
Jako, że każdy szanujący się programista powinien sobie poradzić z odpowiednią konfiguracją swego ulubionego IDE do pracy z SFML, pozwolę sobie ominąć ten jakże nudny z mojego punktu widzenia fragment zabawy ze wszystkimi bibliotekami i przejdę od razu do konkretów – czyli utworzenia pierwszego okienka!
Najpierw musimy dołączyć jeden z nagłówków biblioteki SFML, odpowiadający za utworzenie i obsługę okienka.
#include <SFML/Window.hpp>
Następnie, jak się pewnie już wszyscy domyślili, musimy napisać swoją funkcję main() <- jeżeli czytasz ten artykuł, to zakładam, że wiesz co to jest 😀
int main()
{
return 0;
}
Oczywiście, może to też być funkcja WinMain() jeżeli piszemy pod Windowsa, ale SFML pisze czasem po stderr, więc wygodnie mieć konsolkę 😀
Przykładowe programiki będą zazwyczaj na tyle krótkie i proste, że opakowywanie tego wszystkiego we własne klasy byłoby już znacznym przegięciem.
Moment, w którym napiszemy kod wyświetlający okienko jest coraz bliżej. A właściwie to już nadszedł.
sf::Window app(sf::VideoMode(800, 600, 32), "SFML Window");
Co tutaj robimy? Otóż tworzymy sobie zmienną typu sf::Window. Nazywa się ona app. Konstruktor przyjmuje kilka parametrów, kolejno:
-zmienną typu sf::VideoMode, której kolejne parametry to szerokość, wysokość i ilość bitów na piksel
-tytuł okienka
-opcjonalnie może przyjmować także dodatkowe parametry do ustawienia stylu okienka i innych bardziej zaawansowanych aspektów naszego okienka – na razie nie będziemy się tym przejmować, a chętni mogą poczytać sobie o tych parametrach w dokumentacji, choć o stylach trochę zaraz wspomnę.
Przy okazji od razu widać, że wszystkie funkcje i obiekty SFML znajdują się w przestrzeni nazw sf.
No więc, miałem coś wspomnieć o stylach okienka – otóż możemy podać jako ten parametr kombinację flag sf::Style:
None, Titlebar, Fullscreen, Resize, Close. Domyślny styl to Resize|Close
Pozwolę sobie chwilowo pominąć fullscreen w SFML, gdyż programy podczas uczenia się biblioteki będzie i tak dość wygodnie testować w okienku. Prawdopodobnie jednak kiedyś o tej możliwości napiszę.
Idziemy dalej. Mamy już okienko, ale program zamyka się od razu po uruchomieniu – czy zrobiliśmy błąd, a może kompilator jest popsuty i źle kompiluje program? Albo to jakiś BUG w bibliotece SFML? Otóż nie! Potrzebujemy tak zwanej pętli głównej programu. Czyli, krótko mówiąc, potrzebujemy pętli, w której będziemy co chwila uaktualniać stan okienka, wczytywać dane od użytkownika, albo wykonywać inne czynności związane z aktualnym stanem gry (tudzież innej aplikacji).
while(true)
{
app.Display();
}
Co się dzieje? okienko się pojawia, ale po zamknięciu go krzyżykiem program nadal działa. A właściwie to nawet okienko się nie zamyka. Czy to jakiś bug w bibliotece? Jak się zapewne domyślasz – nie 🙂 Ale do rozwiązania tego problemu potrzebna jest znajomość tak zwanych eventów – ale to dopiero w następnej części artykułu 😉
Read Full Post »