12.07.2026 01:35

Silnik gier: co po animacji — callback ukończenia i sekwencje

⏱️ 2 min czytania
Udostępnij:

Płynne przejścia wartości (tween) w silniku gier 2D Moonlight Studio dostały to, czego brakowało do prawdziwej reżyserii ruchu: callback ukończenia. Teraz możesz powiedzieć „gdy ten ruch się skończy, zrób to" — a z tego jednego klocka składasz całe sekwencje.

Zrób coś, gdy animacja dobiegnie końca

Wystarczy dodać funkcję na końcu wywołania:

mp.tween(wybuch, "opacity", 0, 0.5, function()
    mp.free(wybuch)          -- zniknął → usuń ze sceny
end)

To rozwiązuje klasyczny wzorzec „zanik, a potem zniszcz": obiekt najpierw gładko znika, i dopiero po zakończeniu przejścia jest sprzątany.

Sekwencje — jeden ruch po drugim

Skoro callback może uruchomić kolejny tween, łańcuchy powstają same, bez żadnego dodatkowego mechanizmu:

-- panel wjeżdża, a gdy dojedzie — lekko podskakuje
mp.tween(panel, "y", 0, 0.3, "ease-out", function()
    mp.tween(panel, "y", -12, 0.12, "ease-out", function()
        mp.tween(panel, "y", 0, 0.12)
    end)
end)

Easing i callback możesz podać w dowolnej kolejności — silnik rozpozna, co jest krzywą, a co funkcją.

Odpala się wtedy, kiedy trzeba — i tylko wtedy

Callback jest prymitywem „ukończenia", nie „upływu czasu", więc jego reguły są jednoznaczne:

  • odpala się dokładnie raz, w chwili naturalnego dojścia do celu,
  • nie odpala się, gdy przerwiesz przejście (mp.stop_tween), gdy nadpiszesz je nowym na tej samej właściwości, ani gdy obiekt zniknie ze sceny w trakcie — bo wtedy ruch się nie „ukończył", tylko został anulowany.

Dzięki temu sekwencja nie „przeskoczy do kroku drugiego", gdy krok pierwszy został odwołany — częsty błąd, gdy ktoś próbuje sklejać animacje zwykłym odliczaniem czasu.

Bezpieczne nawet w trudnych przypadkach

Callback odpala Twój kod, a ten może robić rzeczy, które normalnie są pułapką — założyć kolejny tween tej samej właściwości, anulować inny, usunąć obiekt. Tutaj każdy z tych przypadków jest bezpieczny z założenia: callbacki uruchamiają się dopiero po uporządkowaniu listy aktywnych przejść, więc nic się nie „wywraca". A gdy w jednej klatce kończy się kilka przejść, ich callbacki idą w kolejności założenia — deterministycznie.

Co dalej

To fundament reżyserii ruchu. W kolejce: dedykowany zapis sekwencji (tory równoległe, przerwy między krokami) zbudowany na tym samym callbacku ukończenia.

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