Platformowanie i fizyka
Te przypadki krawędzi są liczne. Dobra zabawa platformówki nie zachowują się w żaden fizycznie dokładny sposób, a kontrola i zachowanie, których gracze oczekują po latach „perfekcyjnych” platformówek, takich jak Mario, są niezwykle trudne do wdrożenia za pomocą ogólnych technik, takich jak w Box2D lub innych silnikach fizycznych. Większość dobrych platformówek nie używa żadnej ogólnej fizyki ani reakcji na kolizję w swoich kontrolerach graczy.
Generuj kadłuby
Jeśli chodzi o konkretne pytanie, najlepszym rozwiązaniem jest zaprzestanie używania skrzynek jako podstawy. Użyj szeregu połączonych segmentów linii (kadłuba). Pozwala to silnikowi na wykrywanie kolizji skupić się tylko na powierzchniach, na których można chodzić, i nie patrzeć na „fałszywą” krawędź istniejącą między AB a BC. Tak właśnie działa Box2D. Kształty są używane do generowania zewnętrznych powierzchni, które są połączone ze sobą, tworząc kadłub.
Potrzebujesz tego nawet w grach opartych na kafelkach lub w sytuacjach, w których dwa inne obiekty AABB obok siebie działają jak podłoga. Silnik kolizji podniesie te pionowe krawędzie i spowoduje, że gracz złapie je. Są hacki, które mogą pomóc, ale nie wyeliminować problemu. Rozwiązaniem jest posiadanie pojedynczego segmentu linii reprezentującego powierzchnię zamiast pełnego pola 2D.
Kadłuby można generować w ogólnym przypadku, przycinając wielokąty i łącząc punkty klipu w listę krawędzi.
Ukośne powierzchnie
Ponieważ twój przykład zawiera nachylenie i wspominasz restytucję i inne właściwości fizyczne, przedstawię kilka innych problemów, które wkrótce zauważysz, co dodatkowo ilustruje, dlaczego ogólne wykrywanie kolizji i reakcja nie działa dobrze dla platformówek. Najpierw spróbuj stać na pochylonej platformie, podskoczyć, a następnie wylądować. Prawdopodobnie zauważysz, że postać trochę się „ześlizgnie” podczas lądowania. Problem polega na tym, że normalny kontakt, który generujesz, zwykle będzie wskazywał z nachylonej powierzchni. Następnie podczas rozstrzygania kolizji gracz jest wypychany w tym kierunku. Mimo że postać spadła prosto w dół, zostanie wyrzucona i lekko w prawo podczas lądowania, co spowoduje poślizg. Można to zhakować, biorąc pod uwagę względne prędkości,
Drugim problemem, który zauważysz, a który jest o wiele trudniejszy do rozwiązania, jest to, co dzieje się, gdy próbujesz szybko zjechać z rampy. Gracz „zeskoczy” z rampy. Jest to bardzo widoczne nawet w większości dzisiejszych gier AAA. Nie tylko wygląda to głupio, ale jeśli twoja gra wymaga od gracza stania na ziemi, aby skoczyć, utrudnia zbieganie po pochylni i skakanie w połowie, ponieważ gracz kontaktuje się z rampą tylko przez niewielką część czas spędzony na schodzeniu. Prostszym rozwiązaniem jest po prostu wykonanie niektórych rzutów promieniami, gdy gracz się porusza, i przyciągnięcie pozycji gracza do najbliższej powierzchni (jeśli jest bardzo blisko gracza), jeśli gracz nie skacze i był wcześniej na ziemi.
Może się również okazać, że gracz rzuca się w powietrze, gdy wjeżdża na rampę, jeśli spróbujesz modelować prędkość, tarcie i restytucję odtwarzacza tak, jakby był normalnym sztywnym ciałem. Ruch gracza powinien być ograniczony do ruchu poziomego, chyba że spada / skacze. Oczywiście, jeśli grasz w starsze platformówki ze złotego wieku, możesz zauważyć, że pozioma prędkość gracza jest często stała między poziomymi i nachylonymi powierzchniami. Należy to wziąć pod uwagę również podczas chodzenia po zboczach.
Będzie też wiele innych nieparzystych skrzynek narożnych, na które też się natkniesz. Jeśli próbujesz stworzyć dobrą platformówkę, naprawdę najlepiej jest zaimplementować kontroler odtwarzacza platformówki niezależnie od fizyki i zakodować pożądane zachowanie ruchowe i kontrolne, zamiast polegać na ogólnej fizyce i algorytmie reakcji na kolizję.