Feeds:
Wpisy
Komentarze

Posts Tagged ‘programowanie gier’

Obiecałem ostatnio, że opiszę eventy w SFML. A więc – zaczynamy!

Eventy można podzielić na pewne grupy, dla których struktura Event będzie zawierała określone dane.

Zdarzenie zmiany rozmiaru okna

event.Type=sf::Event::Resized;
event.Size.Width=szerokość w pikselach;
event.Size.Height=wysokość w pikselach;

Zdarzenie wpisania znaku

event.type=sf::Event::TextEntered;
event.Text.Unicode=znak w UTF-32;

Zdarzenia klawiatury

event.type=sf::Event::KeyPressed lub sf::Event::KeyReleased;
event.Key.Code=kod klawisza;
event.Key.Alt=czy alt jest_wciśnięty;
event.Key.Shift=czy shift jest wciśnięty;
event.Key.Control=czy Ctrl jest wciśnięty

Zdarzenia klawisza myszki

event.Type=sf::Event::KeyPressed lub sf::Event::KeyReleased;
event.MouseButton.Button=którego przycisku zdarzenie dotyczy

Zdarzenia przesunięcia kursora myszki

event.Type=sf::Event::MouseMoved;
event.MouseMove.X=współrzędna X kursora;
event.MouseMove.Y=współrzędna Y kursora;

Zdarzenie kółka myszki

event.Type=sf::Event::MouseWheelMoved;
event.MouseWheel.Delta=przesunięcie rolki myszki;

Myślę, że na początek powinno tyle wystarczyć 🙂

Read Full Post »

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 »