13.07.2026 16:05

Silnik gier: kto jest teraz w strefie (Area2D)

⏱️ 2 min czytania
Udostępnij:

Strefy w silniku gier 2D Moonlight Studio od dawna zgłaszały wejścia i wyjścia sygnałem — „ktoś wszedł", „ktoś wyszedł". To świetne do pułapek i checkpointów, ale ogromna część logiki gry potrzebuje czegoś innego: odpytania w danej chwili, kto jest w środku TERAZ.

Pytasz, gdy chcesz

-- obrażenia w promieniu wybuchu, co klatkę
for _, cel in ipairs(mp.bodies_in_area(wybuch)) do
    zadaj_obrazenia(cel, 10)
end

-- regeneracja tylko w strefie bezpiecznej
if mp.is_body_in_area(strefa_bezpieczna, gracz) then heal(gracz) end

mp.bodies_in_area(strefa) zwraca listę obiektów aktualnie nakładających się na strefę; mp.is_body_in_area(strefa, obiekt) sprawdza pojedynczy. Bez prowadzenia własnego zbioru na sygnałach — silnik robi to za ciebie.

Pod maską: żywa lista karmiona zdarzeniami

Lista jest utrzymywana z dokładnie tych samych zdarzeń, które emitują sygnały wejścia/wyjścia — więc odpowiedź zapytania jest zawsze spójna z tym, co usłyszał twój handler. Dwa detale, które łatwo przeoczyć, a które psują naiwną implementację:

  • Wiele kolizerów jednej strefy. Jeśli strefa składa się z kilku kształtów, obiekt stojący na styku dwóch z nich nie znika z listy, gdy opuści tylko jeden — zliczanie nakładania pilnuje, by wypadł dopiero po wyjściu ze wszystkich.
  • Obiekty, które znikają lub się przenoszą. Pocisk skasowany w strefie albo przedmiot podniesiony i przepięty w rękę gracza znikają z listy same — silnik odróżnia „ten sam obiekt wciąż tu jest" od „to już inne wcielenie tego samego identyfikatora". Bez tego lista trzymałaby duchy, których fizycznie w strefie nie ma.

Deterministycznie

Lista zachowuje kolejność wchodzenia, jest czysto runtime'owa (nie zaśmieca zapisanej sceny) i nie zależy od sprzętu — ta sama gra daje tę samą odpowiedź wszędzie.

Co dalej

W kolejce: zapytania obszarem doraźnym (bez stałej strefy — „co jest w tym prostokącie w tej chwili") oraz filtrowanie po warstwach kolizji.

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