13.07.2026 20:32

Silnik gier 2D: żywe mapy — animowane kafle

⏱️ 2 min czytania
Udostępnij:

Mapy kafelkowe (tilemapy) w silniku gier 2D w Moonlight Animate rysowały do tej pory wyłącznie statyczne kafle — każda komórka pokazywała jeden, niezmienny wycinek atlasu. Teraz doszły animowane kafle: woda faluje, lawa bulgocze, pochodnie migoczą — bez pisania kodu na kafel.

Jak to działa

Wskazujesz kafel bazowy (indeks w atlasie), liczbę klatek i tempo (klatki na sekundę). Kafel o tym indeksie cyklicznie pokazuje kolejne wycinki atlasu:

-- Kafel 10 to woda: cztery kolejne klatki w atlasie (10,11,12,13), 4 klatki/s
mp.set_tile_animation(mapa, 10, 4, 4)

Każda komórka mapy, która zawiera indeks 10, ożywa — i wszystkie takie kafle tętnią zgodnie w fazie (cała tafla wody faluje razem, a nie każdy kwadrat po swojemu). Wyłączenie: mp.clear_tile_animations(mapa). Animacje można też zdefiniować w samej scenie (autoring) — zapisują się z mapą.

Deterministyczne i tanie

  • Klatka = funkcja czasu, nie licznik ze stanem. Dzięki temu animacja jest w pełni deterministyczna: ta sama chwila to zawsze ta sama klatka, niezależnie od tego, kiedy kafel pojawił się w scenie — brak „dryfu fazy" między kaflami dodanymi w różnych momentach. Pauza gry zatrzymuje animację, a tempo gry ją skaluje — bo czas pochodzi z tego samego zegara, co reszta świata.
  • Zero dodatkowego kosztu poza ekranem. Mapa i tak rysuje tylko widoczne komórki (kulling do viewportu), a animacja to jedynie podmiana indeksu wycinka atlasu w chwili rysowania.
  • Bezpieczne krawędzie. Klatki wykraczające poza atlas są przycinane (żadnych „śmieciowych" pikseli), a śmieciowe parametry (ujemne, zerowe tempo) po prostu dają kafel statyczny.

Czysto wizualne — kolizja bez zmian

Animacja dotyczy wyłącznie wyglądu. Kolizja mapy (które kafle są „solidne") czyta logiczny indeks kafla, nie aktualnie rysowaną klatkę — więc animowana woda czy lawa zachowuje swoją fizykę niezależnie od tego, którą klatkę akurat widać. To celowa, czysta separacja: malujesz ruch, nie ruszając świata gry.

Nowe pola zapisują się w scenie tylko, gdy mapa faktycznie ma animacje — starsze mapy pozostają bajtowo identyczne (pełna zgodność wsteczna). Kolejny klocek dokładany do silnika gier 2D w Moonlight Animate — tym razem taki, który sprawia, że mapy przestają stać w miejscu.

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