12.07.2026 00:25

Silnik gier: płynne przejścia wartości ze skryptu (tween)

⏱️ 2 min czytania
Udostępnij:

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.

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