Piszę RTS oparty na kafelkach 2D. I chcę dodać do niego funkcję „pseudo 3D” - mosty nad rzekami.
Nie zacząłem jeszcze kodowania, próbuję tylko pomyśleć, jak pasuje do modelu wykrywania kolizji. Łódź przepływająca pod mostem i jednostka poruszająca się nad mostem ostatecznie zajmą tę samą komórkę na mapie. Jak chronić je przed kolizją?
Czy istnieje wspólne podejście do rozwiązania takiego problemu? Czy muszę zaimplementować świat 3D, aby to zrobić?
2d
3d
collision-detection
rts
Aleguna
źródło
źródło
Odpowiedzi:
Zasadniczo będziesz musiał stworzyć trzeci wymiar, chociaż w najprostszym przypadku może on składać się tylko z dwóch wartości: „na ziemi / na moście” i „na wodzie / pod mostem”.
Inspirację można znaleźć w sposobie, w jaki robi to Advanced Strategic Command : jednostki zajmują określony poziom wysokości, mogą poruszać się tylko na poziomach wysokości odpowiadających ich typowi, chyba że istnieją szczególne cechy pozwalające im robić inaczej (na przykład drogi startowe dla samolotów) i ich zmiana zwykle kosztuje punkty ruchu, z karami na niektórych poziomach wysokości lub innych. Płytka może być zajęta przez dowolną liczbę jednostek, o ile każda z nich ma inny poziom wysokości.
W przypadku ASC poziomy są następujące:
źródło
Możesz dodać prosty atrybut do każdego kafelka, który określa jego poziom.
Na przykład:
Teraz możesz posortować kafelki w zależności od wartości warstw i narysować je na dole -> na górze! Dzięki temu będzie wyglądać, jakbyś miał pewną głębię w swojej grze. Obsługuje to większość silników kafelkowych. Kolejną fajną rzeczą, którą możesz dodać, jest przezroczystość tekstur, abyś mógł przejrzeć dolną warstwę.
Można to zrobić na przykład za pomocą wody - wyobraź sobie wodę na poziomie 1, a następnie dno oceanu na poziomie 0. Jeśli tekstura wody jest nieco przezroczysta, będziesz mógł zobaczyć dno oceanu z góry.
źródło