Silnik gier: projekt gry, debugowanie i zapis stanu
Silnik gier 2D przestaje być zestawem klocków dla programisty i zaczyna wyglądać jak narzędzie twórcy: doszedł model projektu gry z szablonami, panel debugowania na żywo oraz zapis i wczytywanie stanu gry.
Nowa gra w minutę: projekt i szablony
W menu Plik pojawiła się pozycja Nowa gra… — gra powstaje jako projekt: katalog z ustawieniami, scenami, skryptami i grafikami, a nie pojedynczy plik. W dialogu wybiera się nazwę, lokalizację, rozdzielczość projektową i szablon 2D:
- Platformowa — od razu grywalna: podłoga, platforma (w zasięgu skoku — sprawdziliśmy fizykę), postać sterowana A/D ze skokiem na spacji i etykieta HUD na warstwie ekranowej,
- Top-down — arena ze ścianami i ruch w czterech kierunkach,
- Pusta — czysty punkt startowy.
Każdy projekt dostaje globalny stan gry (autoload), domyślną mapę klawiszy i startową teksturę. Druga nowa pozycja — Eksportuj grę (.mgame)… — pakuje cały katalog projektu do samodzielnej paczki dla odtwarzacza; eksport odmawia, jeśli projektowi brakuje sceny startowej, więc niedziałająca paczka nie ma prawa powstać. Rozdzielczość projektowa staje się rozmiarem okna gry.
Debugowanie: widzieć grę od środka
Nowe okno Silnik gier: Debug pokazuje działającą grę od podszewki: drzewo sceny na żywo (odświeżane co pół sekundy, z oznaczonymi obiektami globalnymi), inspektor węzła z transformacją i pełnym podglądem tablicy stanu — czyli podgląd „ile złota ma gracz" w trakcie gry, bez jednej linijki dodatkowego kodu — oraz pasek wydajności: FPS, liczba poleceń rysowania, sprite'ów i węzłów. To pierwsza warstwa debuggera; edycja wartości na żywo, konsola i punkty wstrzymania w skryptach przyjdą w kolejnej.
Pauza, która nie zamraża menu
Zatrzymanie gry jednym poleceniem wstrzymuje logikę, fizykę i animacje — ale wejście działa dalej, a węzeł oznaczony jako „działa w pauzie" (wraz z całym poddrzewem) tyka normalnie. Efekt: w pełni interaktywne menu pauzy nad zamrożoną grą, klasyka gatunku. Do tego sceny-nakładki: scenę można dołożyć NA bieżącą, bez jej usuwania — menu, okno dialogowe, ekwipunek.
Zapis gry w slotach
save_game i load_game domykają pętlę dłuższych gier. Zapis obejmuje nazwę bieżącej sceny i stan wszystkich obiektów globalnych; wczytanie przebudowuje scenę od świeża i przywraca stan. Za tym stoi prosta, twarda zasada projektowa: wszystko, co ma przetrwać — złoto, postępy, otwarte skrzynie — żyje w obiektach globalnych, nie w scenie. Uszkodzony plik zapisu jest odrzucany, a nieudane wczytanie wraca do ostatniej działającej sceny zamiast zostawić czarny ekran.
Całość, jak zwykle w tym silniku, jest pokryta testami uruchamianymi bez okna — od skoku postaci, przez bramkę pauzy w obu warstwach skryptowych, po pełny obieg zapisu i wczytania. Następne kroki łuku: konsola debuggera z prawdziwym przechwytywaniem logów silnika i dalsze klocki treści dla szablonów.