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

Budowa szkieletu gry

[lekcja] Rozdział 2. W niniejszym rozdziale opisano jak powinien być skonstruowany szkielet gry.
Budowa szkieletu gry choć z pozoru brzmi prozaicznie to nie jest tak oczywista jak mogłoby się wydawać. Jeżeli do tej pory pisałeś tylko aplikacje konsolowe bądź aplikacje typowo okienkowe to z pewnością niniejszy rozdział będzie dla Ciebie dobrym materiałem do pozyskania nowej wiedzy, a tym samym dobrą metodą na zdobycie nowego doświadczenia.

Każda gra niezależnie od swojego gatunku i rozmiaru projektu zbudowana jest u podstaw tak samo. Każda gra posiada główną pętlę, w której wykonują się różne zdarzenia takie jak np.:
  • obsługa urządzeń wejściowych takich jak klawiatura, joystick czy też mysz;
  • przemieszczanie się obiektów na scenie;
  • renderowanie sceny (w tym również obsługa animacji obiektów).
W związku z tym, że w grze występuje mnóstwo zdarzeń, które mogą zachodzić jednocześnie (np. animowanie kilku postaci naraz) - podejście stosowania pętli znane Ci z tworzenia konsolowego oprogramowania w wielu przypadkach nie będzie możliwe do zastosowania. Pisząc grę nie będziesz mógł zrealizować systemu animacji poszczególnych postaci za pomocą pętli - co więcej niemożliwym też będzie zrealizowanie ruchu wybranego obiektu na scenie przy pomocy pętli. Oznacza to, że koniecznym jest odrzucenie dotychczasowej metodologii wytwarzania oprogramowania i otworzenie się na nową wiedzę, która niewątpliwie będzie Ci niezbędna do stworzenia własnej gry.

Budowa typowego szkieletu gry

Skoro już wiesz jakie problemy napotykają początkujący programiści gier, zobaczmy teraz jak wygląda uniwersalny i sprawdzony w praktyce szkielet gry:
C/C++
bool bIsRunning = true;
while( bIsRunning )
{
    //tu obsługa całej gry
   
    if( /* tu warunek kończący grę*/ )
         bIsRunning = false;
   
} //while
Jak wynika z powyższego kodu szkieletem całej gry jest w praktyce nieskończona pętla, w której umieszczane będą pozostałe elementy gry takie jak renderowanie sceny, przemieszczanie obiektów czy też ich animacje. Nieskończona pętla zostanie przerwana w chwili gdy zostanie spełniony określony warunek, którym zazwyczaj jest chęć wyjścia z aplikacji.

Budowa szkieletu gry w bibliotece SFML

Na zakończenie zamieszczę jeszcze kompletny kod aplikacji, który demonstruje wygląd typowego szkieletu gry zrealizowanego w bibliotece SFML:
C/C++
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Wytwarzanie Gier 2D, C++ | http://cpp0x.pl" );
    while( oknoAplikacji.IsOpened() ) //główna pętla gry
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) ) //pętla obsługująca zdarzenia (wynika z architektury biblioteki SFML)
        {
            if( zdarzenie.Type == sf::Event::Closed ) //kliknięto przycisk zamknij okno
                 oknoAplikacji.Close(); //zakończ aplikację
           
            if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape ) //wciśnięto klawisz ESC
                 oknoAplikacji.Close(); //zakończ aplikację
           
        }
       
        //tu obsługa całej gry
        oknoAplikacji.Display();
    }
    return 0;
}
Poprzedni dokument Następny dokument
Wstęp do wytwarzania gier 2D Wprawianie obiektów gry w ruch