Prosta gra 2D C++

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;
}


Dodaj komentarz






Dodaj

© 2013-2024 PRV.pl
Strona została stworzona kreatorem stron w serwisie PRV.pl