13.07.2026 10:13

Silnik gier: płynne przejścia między animacjami postaci

⏱️ 2 min czytania
Udostępnij:

Silnik gier 2D Moonlight Studio dostał crossfade animacji szkieletu — przełączenie postaci z jednego ruchu na drugi (stanie → chód → bieg) może teraz przenikać zamiast przeskakiwać. To ten mało zauważalny, a wszechobecny detal: bez niego bohater w jednej klatce stoi, a w następnej ma już nogi w połowie kroku. Oko to wyłapuje jako „szarpnięcie".

Jedna linijka, jeden argument

mp.play_clip(bohater, "chodzi", true, 0.2)

Czwarty argument to czas przejścia w sekundach. Przy przełączeniu program zamraża bieżącą pozę postaci i przez 0,2 s przechodzi z niej do nowego klipu: każda kość obraca się najkrótszym łukiem, a przesunięcia i długości płyną liniowo. Krótkie przejście (0,1–0,25 s) całkowicie zdejmuje „przeskok" między animacjami, a Ty nie ruszasz samych klipów — tylko dokładasz jedną liczbę.

Pominięty argument (albo 0) to przełączenie natychmiastowe — dokładnie jak wcześniej. Stary kod działa bez zmian.

Zaprojektowane, by nie „szarpnąć"

  • Przejście się domyka nawet, gdy nowy klip jest jednorazowy (np. „cios") i skończy się w trakcie przenikania — mieszanie dojeżdża do końca zamiast urwać się w pół drogi.
  • Ponowne przełączenie w trakcie startuje z bieżącej, już zmieszanej pozy — seria szybkich zmian (stoi → chodzi → biegnie w ułamku sekundy) płynie bez skoków.
  • Najkrótszy łuk znaczy, że kość obrócona tuż przy granicy pełnego obrotu przejdzie „na skróty", a nie objedzie całe koło w drugą stronę.
  • Liczy się w czasie gry — pauza zamraża przejście, spowolnienie je rozciąga; przenikanie zachowuje się jak reszta świata.

Deterministycznie i wspólnym kodem

Ta sama matematyka miksowania póz, która napędza kontrolery rigu (celowanie, śledzenie, IK), obsługuje teraz również crossfade — jedno źródło prawdy zamiast dwóch osobnych ścieżek. Dzięki temu ta sama klatka daje zawsze tę samą pozę, na każdym komputerze.

Co dalej

Fundament pod drzewo animacji jest gotowy. W kolejce: mieszanie dwóch klipów jednocześnie (dla dłuższych, zsynchronizowanych cykli chodu) oraz krzywe czasowe przejścia (nie tylko liniowe).

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