Jak zaimplementować eksplozję 2D w taki sposób, aby powodowała mniejsze obrażenia postaci chowających się za skrzyniami lub inną osłoną? Idealnie uszkodzenie będzie zależeć od wytrzymałości osłony (np. Metalowa ściana będzie lepiej chronić niż drewniana skrzynia). Idealnie obrażenia zmniejszają się również wraz z odległością.
Użyję portu silnika fizyki Box2D - Farseer.
Dziękuję Ci.
physics
box2d
farseer-physics-engine
Legowisko
źródło
źródło
Odpowiedzi:
Względnie uproszczony sposób polega na narysowaniu promienia od środka wybuchu do środka każdej istoty, gdzie
DISTANCE(explosion,entity) < exlosion.max_radius
(pseudo-kod).Dla każdego bytu podążaj za tym promieniem, zmniejszając podstawowe obrażenia w miarę przemieszczania się. Ilekroć uderzasz w przedmiot, odejmuj jego wartość ochrony od obrażeń (zasadniczo skracając promień).
Kiedy promień uderza w istotę, wszelkie obrażenia, które pozostały, to obrażenia od wybuchu.
W tym podejściu prawdopodobnie potrzebujesz dość wysokich obrażeń podstawowych, które szybko zmniejszają się wraz z odległością (odwrotnie proporcjonalne do kwadratu odległości powinno zrobić dobrze).
Innym podejściem jest narysowanie sektora całkowicie zawierającego jednostkę; ale nie szerszy; i aż do
.max_radius
. Odejmij od obszaru tego sektora obszar objęty dowolną osłoną między eksplozją a bytem, pomnożony przez jego wartość osłonową. Pozostały obszar to obrażenia od wybuchu.Jednym fajnym efektem ubocznym jest to, że im bliżej eksplozji jest byt, tym szerszy sektor zyskuje i tym więcej otrzymujesz obrażeń (licząc cały obszar sektora i po prostu odejmując obszar osłony między byt i wybuch.
Przydatne może być również traktowanie ochrony ubezpieczeniowej jako podmiotów; i po prostu odejmij obrażenia otrzymane przez bliższe byty od tych znajdujących się dalej, ale mogą one ulec poważnemu uszkodzeniu.
Niewątpliwie istnieje jeszcze bardziej eleganckie i sprytne podejście, ale prawdopodobnie wymaga trochę nieprzyjemnego rachunku różniczkowego. Zawsze tak jest.
źródło
Zmniejszenie obrażeń wraz z odległością powinno być prostym zadaniem. Kiedy tworzysz eksplozję, powinieneś znać współrzędne środka wybuchu. Ponieważ pracujesz w 2d, będzie to tylko xiy.
Wszystko, co musisz zrobić, to obliczyć odległości gracza od współrzędnych środka wybuchu, używając twierdzenia Pitagorasa, a następnie użyć tego w odniesieniu do maksymalnego promienia, aby obliczyć procent całkowitych obrażeń.
Na przykład weź współrzędne (x1, y1) jako punkt środkowy eksplozji, a (x2, y2) jako współrzędne gracza. Następnie możemy obliczyć otrzymane obrażenia w następujący sposób:
Co do rzeczy, jestem zbyt zmęczony, aby wymyślić odpowiedź, ale w zasadzie szukałbyś skrzyżowań wzdłuż linii od środka wybuchu do gracza.
źródło