11.07.2026 12:14

Silnik gier: przepływ gry — sceny, trwały stan, HUD i postać

⏱️ 3 min czytania
Udostępnij:

Po domknięciu eksportu do jednego pliku silnik gier 2D dostał kolejny pakiet fundamentów — tym razem o przepływie całej gry: jak przechodzi się między ekranami, co przeżywa te przejścia, jak rysować interfejs nad światem gry i jak poruszać postacią, która nie przenika przez ściany.

Zmiana sceny jednym poleceniem

Gra to nie jedna scena — to menu, poziomy, ekran wyniku. Od teraz skrypt (albo węzeł grafu logiki) woła po prostu change_scene("poziom-2"): stara scena znika w całości, nowa ładuje się z paczki gry. Zamiana jest odroczona do granicy klatki — nigdy nie wykonuje się w środku logiki, więc skrypt może ją zawołać w dowolnym momencie (np. przy zebraniu ostatniej monety) bez ryzyka, że wytnie grunt spod własnych nóg. Ten sam mechanizm działa w podglądzie Play w edytorze i w samodzielnym odtwarzaczu.

Trwały stan między scenami: autoloady

Skoro sceny się wymieniają, potrzebne jest miejsce na to, co ma przetrwać: liczba monet, postęp, menedżer muzyki. W manifeście gry deklaruje się autoloady — globalne obiekty (skrypt lub cała pod-scena), tworzone raz przy starcie gry i żyjące obok wymienialnych scen. Zmiana poziomu ich nie dotyka; skrypt singletona startuje jeszcze przed sceną startową, więc pierwsza scena może od razu z niego korzystać. Ochrona przed duplikatami przy ponownym wczytaniu jest wbudowana.

Warstwa ekranu: HUD niezależny od kamery

Nowy węzeł warstwy ekranowej sprawia, że jego poddrzewo rysuje się w przestrzeni ekranu — kamera może jeździć po świecie, a licznik punktów, pasek życia czy tło parallax stoją w miejscu. Numer warstwy porządkuje całe plany (świat, interfejs nad nim, tła pod nim), a w obrębie warstwy działa zwykła kolejność głębokości. To fundament pod pełny system interfejsu gry z kotwicami ekranu, który przyjdzie z edytorem gier.

Ciało postaci: ruch bez tunelowania

Największy kawałek tego etapu to gotowy węzeł postaci. Zamiast ręcznie składać ciało fizyczne i pilnować kolizji, ustawia się prędkość i woła move_and_slide co klatkę — postać ślizga się po podłodze, zatrzymuje na ścianach i nie przenika przez przeszkody nawet przy dużych prędkościach, bo kolizje rozwiązuje pełny solver fizyki. Do tego proste pytania: „czy stoję na podłodze?", „czy dotykam ściany?" — liczone z rzeczywistych normalnych kontaktu, z konfigurowalnym progiem nachylenia podłogi. Grawitację kontroluje logika gry (klasyczny idiom platformówki), a kształty postaci są beztarciowe, żeby docisk do podłoża nie ścierał prędkości marszu.

Przy okazji tego etapu przez cały nowy kod przeszedł osobny audyt — wyłapał i zamknął m.in. subtelny błąd czasu życia obiektów przy zmianie sceny w tej samej klatce, w której coś usunięto, oraz cichy wyciek pamięci przy podpinaniu sygnałów ze skryptów w scenach wymienianych wielokrotnie. Wszystko pokryte testami regresyjnymi — silnik ma ich już 31 grup, uruchamianych bez okna, na czystej logice.

Następny krok łuku: model projektu gry — „Nowa gra" z szablonami, ustawienia projektu i doki edytorskie wokół drzewa sceny.

📚 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.