/ / W jaki sposób należy skutecznie wdrażać solidne obiekty gry platformowej? - algorytm, implementacja

W jaki sposób należy skutecznie wdrażać solidne obiekty platformy gry platformowej? - algorytm, implementacja

Próbowałem napisać silnik platformyjuż kilka razy. Chodzi o to, że nie jestem do końca usatysfakcjonowany szczegółami implementacji obiektów bryłowych. (ściana, podłoga, sufit) Mam kilka scenariuszy, które chciałbym omówić.

Za prostą grę platformową, taką jak pierwszaMario, wszystko jest w zasadzie blokami. Dobra implementacja powinna sprawdzać tylko pod kątem kolizji, na przykład, jeśli Mario działa, a na końcu drogi jest klif, w jaki sposób powinniśmy efektywnie sprawdzić kolizję? Czy powinniśmy zawsze sprawdzać, co robi Mario, aby sprawdzić, czy jego hitbox jest nadal na ziemi? Czy jest jakiś inny sposób programowania, który pozwala nam nie obsługiwać tego każdego klatki?

Ale bloki są nudne, umieśćmy w zboczach. Wdrażanie szczegółów, jak należy obchodzić się ze zboczami? Niektóre gry, takie jak Sonic, mają strukturę pętli, którą postać może przejść w "woohoo" w pętli i kontynuować.

Innym scenariuszem jest obsługa "solidnych" obiektów (podłoga, sufit, ściana). W Megaman widzimy, że gracz może przejść przez sufit za pomocą narzędzia, aby wejść do solidnej "ściany". Możliwe, że programowanie ma na celu zmusićgracz wyjdzie ze ściany, aby gracz nie utknął, przesuwając odtwarzacz szybko w prawo. Jest to stara metoda "obejścia", aby uniknąć sytuacji, w której gracz utknie w ścianie. W nowszych grach w dzisiejszych czasach uchwyt jest bardziej złożony. Weźmy na przykład Super Smash Brawl, w którym gracze mogą powiększać postacie (wraz z ich hitboxem) Program pozwala graczowi poruszać się "w" suficie, ale gdy postać znajdzie się poza "solidnym" obszarem, nie może Wracajcie. Co więcej, czasami postać jest gigantyczna, przez co przechodzą przez 3 stałe piętra sceny i nadal mogą się wewnątrz dobrze poruszać. Ktoś zna szczegóły implementacji wzdłuż tych linii?

A więc wiem, że jest ich wieleWdrożenie możliwe, ale chcę tylko zapytać, czy są jakieś zaawansowane szczegóły techniczne gry platformowej, o której powinienem wiedzieć? Obecnie pytam o 3 rzeczy:

  1. Jak skutecznie radzić sobie z solidną kolizją gry platformowej? Czy możemy poświęcić mniej czasu na sprawdzenie, czy postać uciekła i całkowicie spadła z platformy?

  2. Programowanie nachylenia. Najpierw myślałem o silniku fizyki, ale myślę, że to może być przesada. Ale tutaj widzę, że stoki są innymi rodzajami podłogi, które "popychają" lub "ciągną" postać do innej wysokości. A może powinno być inaczej zaprogramowane?

  3. Obsługa przedmiotów bryłowych w specjalnych przypadkach. Może się zdarzyć, że gracz wpadnie na stałe obiekty za pośrednictwem legalnych reguł gry lub trzasków, ale ogólnie rzecz biorąc, zawsze jest to zły pomysł, aby popchnąć gracza w jakimś przypadkowym kierunku, jeśli jest on w ścianie.

Odpowiedzi:

1 dla odpowiedzi № 1
  1. Dla małej liczby obiektów, wykonując wszystkie parytest wykrywania kolizji przy każdym kroku czasowym jest w porządku. Kiedy zdobędziesz więcej niż kilkaset obiektów, możesz zacząć rozważać bardziej wydajną metodę. Jednym ze sposobów jest użycie a partycjonowanie przestrzeni binarnej (BSP), aby sprawdzać tylko obiekty znajdujące się w pobliżu. Wykrywanie kolizji jest bardzo dobrze zbadanym tematem i istnieje mnóstwo zasobów opisujących różne optymalizacje.
  2. Rzeczywiście, silnik fizyczny jest prawdopodobnie przesadzonyto zadanie. Mówiąc ogólnie, możesz skojarzyć z każdą poruszającą się postacią "ziemię", na której stoi. Wtedy, kiedy się porusza, po prostu zmuszasz go do poruszania się po osi ziemi.
  3. Wślizgiwanie się w obiekty jest prawie zawsze złym pomysłem. Staraj się go unikać, jeśli to możliwe.