13.07.2026 11:37

Silnik gier: platformy ruchome, które naprawdę niosą

⏱️ 3 min czytania
Udostępnij:

Silnik gier 2D Moonlight Studio dostał ruchome platformy z pełnym „niesieniem" postaci. To jeden z tych elementów platformówki, którego nikt nie zauważa, dopóki działa — i który psuje całą grę, gdy nie działa: wskakujesz na jadącą platformę, a ona… wyjeżdża ci spod nóg, bo fizyka nie wie, że powinieneś jechać razem z nią.

Zero kodu gry

Platformę składasz z klocków, które już są w silniku: ścieżka wyznacza trasę, podążający jedzie po niej, a podpięte pod niego ciało kinematyczne z koliderem koliduje jak każda inna podłoga. Nowość jest pod maską: ciała podążają teraz za swoim położeniem w świecie, więc mogą być zagnieżdżone pod ruchomym rodzicem — i naprawdę jeżdżą.

Niesienie postaci dzieje się samo. Silnik śledzi, na czym postać stoi, i co krok fizyki przekazuje jej prędkość powierzchni. Postać nie zsuwa się z jadącej platformy, jedzie z nią w dół bez utraty kontaktu z podłożem, a wniesiona w ścianę zostaje poprawnie zablokowana — bo ruch integruje solver fizyki, nie doklejka na pozycji.

Zeskok, który niesie

Drugi klasyk: wyskok z jadącej platformy powinien nieść. Zejście z krawędzi, skok albo nawet zniknięcie platformy pod nogami przekazuje postaci jej pęd — raz, dokładnie w chwili utraty podłoża. Skrypt może ten pęd odczytać nowym mp.velocity(postać) i modyfikować zamiast nadpisywać:

local vx, vy = mp.velocity(hero)
if mp.is_action_pressed("right") then vx = vx + 40 end
mp.move_and_slide(hero, vx, vy)

Zaprojektowane, by się nie rozjechać

Najtrudniejsza część jest niewidoczna: prędkość powierzchni jest wstrzykiwana przed krokiem solvera i zdejmowana zaraz po nim — symetrycznie. Dzięki temu:

  • postać, której skrypt nic nie robi (NPC stojący na platformie), jedzie równo i nigdy nie przyspiesza sama z siebie,
  • klatka z dwoma krokami fizyki nie podwaja niesienia,
  • ściana, która pochłonęła część niesionego ruchu, nie zamienia się w „odrzut" w przeciwną stronę,
  • odczyt prędkości w skrypcie pozostaje czysty — stojąc na jadącej platformie widzisz zero, nie prędkość platformy.

Do tego platforma skasowana w trakcie jazdy jest w pełni bezpieczna (postać dostaje jej pęd i leci dalej), a platformy jednokierunkowe też mogą jeździć — przelot od dołu i lądowanie na wierzchu działają w ruchu.

Deterministycznie

Ruch po ścieżce liczy się teraz w kroku fizyki, nie w klatce renderowania — ta sama gra daje ten sam przejazd niezależnie od wydajności maszyny, a pauza i spowolnienie działają jak w całej reszcie świata gry.

Co dalej

W kolejce: przenoszenie obrotu platformy na pasażera oraz platformy okrężne z polem grawitacji.

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