Silnik gier: co po animacji — callback ukończenia i sekwencje
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.