Grafika i obszar kolizji to różne elementy
Widoczny obraz postaci może zawierać przezroczyste marginesy, broń i ozdobne efekty. Użycie całego prostokąta grafiki jako przeszkody często daje zderzenia, które gracz odbiera jako niesprawiedliwe. Zdefiniuj osobny kształt opisujący fizyczny kontakt oraz ewentualnie inny obszar przyjmowania trafień. Nie każda gra potrzebuje dokładnego obrysu pikseli. Proste, przewidywalne kształty bywają łatwiejsze do strojenia i wyjaśnienia niż bardzo szczegółowy model.
Dodaj tryb diagnostyczny pokazujący granice kolizji, kierunek ruchu i punkty kontaktu. Bez niego poprawki zamieniają się w zgadywanie na podstawie animacji. W przykładzie skaczącego bohatera sprawdź, czy zmiana klatki grafiki nie przesuwa przypadkiem kształtu fizycznego. Stała reguła kontaktu pomaga zachować spójność sterowania. Ozdobny płaszcz może poruszać się swobodnie, bez rozszerzania obszaru, który blokuje przejście przez drzwi.
Nie każda para obiektów wymaga dokładnego testu
Porównanie każdego obiektu z każdym szybko zwiększa liczbę obliczeń. Najpierw odrzuć pary, które nie mogą się spotkać, na przykład przez podział przestrzeni na komórki lub inne struktury. Dopiero dla kandydatów wykonuj dokładniejszy test kształtów. Rozmiar komórki i sposób aktualizacji dobierz do skali świata oraz obiektów. Zbyt drobny podział może zwiększyć koszt obsługi, a zbyt duży pozostawi prawie wszystkie pary do sprawdzenia.
Ustal również warstwy oddziaływania. Dekoracja tła nie musi kolidować z pociskiem, a dwa przedmioty kolekcjonerskie niekoniecznie wymagają wzajemnego testu. Reguły kategorii powinny być jawne i możliwe do sprawdzenia w narzędziach. Nie ukrywaj wyjątków w wielu miejscach kodu, bo nowy typ obiektu łatwo otrzyma przypadkowe zachowanie. W raporcie wydajności rozdziel liczbę kandydatów od faktycznych kontaktów; pomaga to ocenić skuteczność wstępnej selekcji.
Szybki ruch może ominąć przeszkodę między aktualizacjami
Jeżeli sprawdzasz tylko pozycję na początku i końcu kroku, pocisk może znaleźć się najpierw przed cienką ścianą, a potem za nią. Żaden z dwóch stanów nie musi nachodzić na przeszkodę. To nie znaczy, że ściana została źle narysowana. Problemem jest pominięta droga ruchu. Rozwiązaniem może być test przecięcia toru, ciągłe wykrywanie kontaktu lub odpowiednio dobrane podkroki, zależnie od kształtu i mechaniki.
Nie zmniejszaj kroku w nieskończoność bez oszacowania kosztu. Dla szybkiego, małego pocisku często warto osobno potraktować odcinek przemieszczenia. Dla złożonego obiektu obracającego się potrzebna może być bardziej zaawansowana metoda. Określ maksymalną prędkość i najmniejszą przeszkodę, które projekt ma obsłużyć. Test odbiorowy powinien obejmować właśnie te skrajności, a nie tylko powolne chodzenie bohatera po dużej platformie.
Wykrycie kontaktu i reakcja nie są tym samym
Test może odpowiedzieć, że dwa obiekty się przecinają, ale nadal trzeba zdecydować, co to znaczy: zatrzymanie, odbicie, obrażenie czy zebranie przedmiotu. Oddziel tę logikę od obliczeń geometrii. Obszar wyzwalający dialog może wykrywać wejście, choć nie blokuje ruchu. Dzięki rozdzieleniu można używać podobnego mechanizmu kontaktu do różnych zdarzeń bez dopisywania wyjątków do każdej funkcji matematycznej.
Zdefiniuj początek, trwanie i koniec kontaktu. Przyznanie punktu w każdej klatce nachodzenia na monetę da wiele nagród za jedno zebranie. Usunięcie obiektu w trakcie iterowania listy kontaktów może z kolei pominąć kolejny element. Rozważ zebranie zdarzeń, a następnie ich kontrolowane zastosowanie. Kolejność powinna być przewidywalna, szczególnie gdy jedno trafienie usuwa przeciwnika, a inne próbuje jeszcze zmienić jego stan w tym samym kroku.
Granice i tolerancje powinny odpowiadać mechanice
Kontakt dokładnie na krawędzi wymaga jednoznacznej reguły. Czy zetknięcie oznacza kolizję, czy dopiero nakładanie? Jak traktujesz małe różnice wynikające z obliczeń zmiennoprzecinkowych? Nie dodawaj przypadkowego „małego przesunięcia” w wielu miejscach. Ustal tolerancję, jednostki świata oraz sposób korygowania pozycji. Inaczej bohater może drżeć przy ścianie albo stopniowo zapadać się w podłogę, mimo że każdy pojedynczy warunek wygląda poprawnie.
Przy sterowaniu platformowym istotne jest rozpoznanie podłoża i kierunku kontaktu. Dotknięcie boku ściany nie powinno automatycznie przywracać możliwości skoku, chyba że to zamierzona mechanika. Sprawdź narożniki, ruchome platformy i zderzenie kilku obiektów jednocześnie. Odbiorca ocenia przewidywalność, nie matematyczną elegancję rozwiązania. Jeśli kształt trafienia jest celowo łagodniejszy od grafiki, utrzymuj tę zasadę konsekwentnie zamiast zmieniać ją losowo między poziomami.
Diagnozuj kontakty na małych scenach testowych
Przygotuj osobne sceny: szybki pocisk i cienka ściana, obiekt w narożniku, dwie ruchome przeszkody oraz start wewnątrz innego kształtu. Uruchamiaj je przy różnych częstotliwościach rysowania i kroku symulacji. Zapisuj pozycje przed ruchem, po ruchu i po korekcie. Nagranie samego obrazu może nie pokazać, w którym miejscu reguła zawiodła. Dane diagnostyczne pozwalają odtworzyć kontakt bez ręcznego polowania na rzadki błąd.
Mierz koszt systemu przy liczbie obiektów zbliżonej do najtrudniejszej sceny. Nie oceniaj go tylko w pustym poziomie. Po optymalizacji porównaj listę zdarzeń z wersją referencyjną, aby szybszy filtr nie gubił prawdziwych kolizji. Dobre wykrywanie zderzeń łączy geometrię, model czasu i reguły gry. Dopiero ich wspólna kontrola wyjaśnia, dlaczego pocisk przelatuje przez ścianę albo bohater przegrywa, choć na ekranie wyglądał na bezpiecznego.
