Buduję prostą grę Jump n 'Run w stylu Plattformer. Nie używam kafelków - zamiast tego mam geometryczne kształty dla moich jednostek poziomu (a gracz też jest jednym). Skończyłem kod wykrywania kolizji i do tej pory wszystko działa dobrze.
Następnie chciałem zastosować skakanie. Tylko sprawdzam, czy gracz naciska odpowiedni klawisz i dodaje trochę prędkości w górę. Działa w porządku. Ale działa, nawet jeśli odtwarzacz jest w powietrzu, czego nie chcę. ;-)
Muszę więc sprawdzić, czy gracz na czymś stoi. Moim pierwszym pomysłem było sprawdzenie, czy w ostatniej klatce doszło do kolizji i oznaczenie gracza jako „zdolnego do skoku”, ale zadziałałoby to nawet, gdyby gracz uderzył w ścianę w powietrzu. Ponieważ moje umiejętności matematyczne nie są tak dobre, proszę o pomoc - nawet wskazówki, jak to zrobić.
Dzięki!
Z pewnością powinieneś wdrożyć jakiś rodzaj powierzchni. Pomyśl o tym, jak sobie poradzisz, jeśli będziesz mógł wspiąć się po drabinie, jeśli nie wiesz, czy twoja postać po prostu zderzyła się ze ścianą lub drabiną? Możesz po prostu użyć OOP do zarządzania hierarchią typów przy użyciu dziedzictwa, ale sugerowałbym użycie „kategorii” zaimplementowanych przy użyciu typu wyliczonego:
Oto pomysł: Wyliczenie „Kolizje” ma flagę dla każdej kategorii. Na przykład:
Dzięki tej metodzie będziesz mógł sprawdzić, czy gracz po prostu zderzył się z czymś, czym powinieneś zarządzać, aby twój silnik mógł nazwać metodę „zderzoną” encji:
Metoda wykorzystuje flagi bitowe i bitowy operator „Lub”, aby upewnić się, że każda grupa ma inną wartość na podstawie wartości binarnej kategorii. Ta metoda działa dobrze i jest łatwo skalowalna, dzięki czemu można tworzyć celne grupy kolizyjne. Każda jednostka (gracz, wróg itp.) W twojej grze ma pewne bity zwane „filtrem”, które służą do ustalenia, z czym może się zderzyć. Twój kod kolizyjny powinien sprawdzić, czy bity są zgodne i odpowiednio zareagować, z pewnym kodem, który może wyglądać następująco:
źródło
Jeśli weźmiesz pod uwagę stopę swojej postaci jak zawsze pod postacią o określoną odległość, a jeśli nie oddalasz się od powierzchni, twoja postać leży na ziemi.
W przybliżeniu pseudokod:
źródło
char
, nawet w pseudokodzie.