Silnik gier: płynne przejścia wartości ze skryptu (tween)
Silnik gier 2D Moonlight Studio dostał tween — płynną zmianę właściwości węzła w czasie, sterowaną wprost ze skryptu gry. Zamiast ustawić wartość natychmiast, każesz jej „dopłynąć" do celu w zadanym czasie z wybraną krzywą. To codzienny budulec game-feelu: wjazd panelu, zanik postaci, płynna zmiana pory dnia, sprężysty odskok.
Jedna linijka = ruch w czasie
mp.tween(panel, "y", 0, 0.3, "ease-out") -- panel wjeżdża w 0,3 s
mp.tween(duszek, "opacity", 0, 0.5) -- zanik w pół sekundy
mp.tween(postac, "rotation", 3.14, 1.0) -- obrót o pół obrotu
Interpolowane właściwości (skalarne): x, y, rotation, scale_x, scale_y, opacity oraz kanały barwy modulate_r/g/b/a. Krzywa (domyślnie linear) to te same nazwy, co na osi czasu animacji — ease-in, ease-out i pozostałe.
Barwa jednym wywołaniem
Bo zmiana koloru to zwykle cztery kanały naraz, jest skrót:
mp.tween_modulate(swiat, 0.3, 0.3, 0.55, 1, 2.0) -- świat robi się nocą w 2 s
A ponieważ barwa dziedziczy się w dół drzewa, jeden tween na korzeniu świata przyciemnia całą scenę — a HUD w warstwie ekranowej zostaje jasny.
Zachowuje się rozsądnie
- Startuje od wartości bieżącej w chwili wywołania — nie musisz podawać punktu startu.
- Nowy tween zastępuje poprzedni na tej samej właściwości — dwa „dojazdy" nie walczą ze sobą.
- Pauza gry zamraża tween (chyba że węzeł działa w czasie pauzy, jak menu); po wznowieniu dokańcza.
- Deterministyczny — te same wejścia dają dokładnie ten sam przebieg.
- Sam się sprząta: gdy węzeł zniknie ze sceny, jego tweeny po prostu przestają istnieć.
Sterowanie
local id = mp.tween(wrog, "x", 400, 1.5, "ease-in-out")
mp.stop_tween(id) -- przerwij konkretny
mp.stop_tweens(wrog) -- przerwij wszystkie na węźle
local trwa = mp.is_tweening(wrog)
Co dalej
Fundament tweenowania jest gotowy. W kolejce: łączenie tweenów w sekwencje (jeden po drugim), zdarzenie „zakończono" oraz płynne przejścia dowolnej wartości logiki gry.