Sprawdzam kolizję dla postaci platformówki, jak pokazano w # 1. Czerwone kropki to sprawdzane piksele, a szare linie wskazują osie, których dotyczą. Podobają mi się wyniki uzyskane w ten sposób podczas sprawdzania kolizji (zamiast, powiedzmy, ramki ograniczającej). Wszystko działa dokładnie tak, jak bym tego chciał, z wyjątkiem jednego problemu: wykrywania zmiażdżenia.
Na poniższych obrazach jasnoniebieskie pole reprezentuje ziemię, pomarańczowe pole jest obiektem, a strzałki wskazują kierunek ruchu.
Prostym rozwiązaniem do wykrycia, kiedy gracz jest zmiażdżony, jest sprawdzenie, czy oba punkty kolizji po przeciwnych stronach się aktywują. Jeśli tak, gracz jest miażdżony. W punkcie 2 możesz zobaczyć normalny scenariusz zmiażdżenia. Gracz jest uziemiony, a górne punkty zderzenia przecinają spadający obiekt. To wywołuje sympatię.
# 3, 4 i 5 przedstawiają problematyczne scenariusze. Na # 3 gracz porusza się w kierunku obiektu, który porusza się w górę. Punkt kolizji po prawej stronie uderza w obiekt, powodując kolizję i zatrzymując gracza.
Teraz, jeśli obiekt nadal porusza się w górę, a gracz kontynuuje ruch w prawo (jak pokazano na # 4), obiekt usuwa punkt kolizji prawej strony gracza, a gracz porusza się w prawo. Ale teraz, po zrobieniu tego, obiekt przecina górny punkt zderzenia, powodując niepożądane zgniecenie pionowe.
Podobny scenariusz pokazano w punkcie 5. Dwa obiekty są wystarczająco daleko od siebie, aby oczyścić dolne punkty kolizji, pozwalając graczowi spaść, ale nie do tego stopnia, aby pozwolić na wyczyszczenie bocznych punktów kolizji, powodując niepożądane zgniecenie w poziomie.
Rozmyślałem nad rozwiązaniem, ale nic, co wymyśliłem, nie zadziałało szczególnie dobrze, więc zastanawiam się, czy ktoś nie ma pomysłu lub wiedzy na temat rozwiązania tych problemów.
Aby wyjaśnić pewne nieporozumienia, czerwone punkty kolizji znajdowałyby się wewnątrz duszka, a szare linie były używane tylko do oznaczenia odpowiedniej osi dla każdego punktu kolizji. Na przykład, jeśli duszek postaci był prostym zielonym kwadratem, punkty kolizji wyglądałyby mniej więcej tak: