11.07.2026 13:10

Silnik gier: projekt gry, debugowanie i zapis stanu

⏱️ 3 min czytania
Udostępnij:

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.

📚 Powiązane posty

14.07.2026 22:19

Silnik gier: od szablonu do grywalnej gry RPG top-down

Startowy szablon silnika gier to teraz kompletny, grywalny wycinek gry RPG top-down: chodzenie po siatce, rozmowy z postaciami, przeciwnik goniący gdy...
Czytaj dalej →
14.07.2026 19:16

Moonlight Animate — system dialogów w grach

Silnik gier 2D w Moonlight Animate ma teraz kompletny system dialogów: kwestie z efektem maszyny do pisania, wybory z warunkami, zmienne fabularne i g...
Czytaj dalej →
14.07.2026 18:40

Moonlight Animate: ruchoma panorama dźwięku także w wyeksportowanym wideo

Dźwięk przejeżdżający z lewego do prawego głośnika brzmiał dobrze w podglądzie, ale eksport przez serwer zamrażał go w miejscu. Ostatnia luka parytetu...
Czytaj dalej →

📧 Bądź na bieżąco!

Zapisz się na listę oczekujących, aby otrzymywać powiadomienia o nowych postach na Dev Blog oraz informacje o starcie platformy Moonlight.