Jak mogę zdefiniować złożony obszar kolizji na mapie kafelków?

13

Jak wiele osób poleciło, używam edytora map Tiled do tworzenia mapy dla mojej gry i jest to świetne, szczególnie, że framework libgdx zapewnia również API dla map z Tiled.

Rozumiem, że mogę zdefiniować kolidujące kafelki lub nie w edytorze map, więc mogę poradzić sobie z każdą kolizją w moim kodzie. Ale obecnie znajduję się w sytuacji, w której muszę podzielić kafelek na kolidujące i niepodlegające kolizji obszary. Myślę, że mogę ręcznie zdefiniować punkty i linie granic dwóch obszarów i programowo sobie z tym poradzić. Ale to dużo pracochłonnej pracy.

Dużo googlowałem i znalazłem tego edytora fizyki. To wydaje się być doskonałym narzędziem do automatyzacji procesu, o którym wspomniałem powyżej. System działa jednak z każdym rozpakowanym obrazem i nie jestem pewien, czy zadziałałby nawet po rozpakowaniu obrazu do działania.

Zastanawiam się, czy istnieje lepszy sposób na wykonanie tego całego procesu definiowania obszaru kolizji. Wszelkie sugestie będą mile widziane.

Tae-Sung Shin
źródło

Odpowiedzi:

22

Jak zwykle rzucę tylko kilka pomysłów na stół. Z pewnością można podejść do tego problemu na kilka sposobów. Opiszę trzy, które udało mi się zapamiętać, i to ty decydujesz, które z tych podejść jest dobre dla twojego projektu.

Pomysł 1: Powtarzalne wzory na twoich kafelkach

Czy twój system musi być wystarczająco elastyczny, aby obsługiwać dowolny możliwy obszar kolizji, czy może możesz go rozbić na skończony zestaw kształtów płytek, który możesz budować i traktować je jako specjalne przypadki? Oto kilka zasobów do przeczytania na temat tego pomysłu:

Pomysł 2: zignoruj ​​mapę tilem

Tak, całkowicie zignoruj ​​mapę tilem i zapisz inną, wielokątną reprezentację obszaru kolizji. Następnie nałóż tę geometrię na mapę opartą na kafelkach i obsługuj z nią kolizje. Jeśli nie potrzebujesz żadnej fizyki, sprawdź następujące zasoby:

W przeciwnym razie myślę, że prawdopodobnie możesz użyć narzędzia, z którym się łączysz.

Pomysł 3: Idealne wykrywanie kolizji przez piksele

Używaj idealnych kolizji w pikselach i używaj oddzielnej maski lub tylko kanału alfa w kafelkach, aby zakodować zmienne obszary kolizji. Aby uzyskać inspirację, sprawdź następujący przewodnik:

  • Fizyka w Sonic - Solid Tiles

    Jeśli kolizja odbywa się bezpośrednio z pikselami sąsiadującymi, takimi jak to:

    wprowadź opis zdjęcia tutaj

    I pokrewna odpowiedź, która może być również istotna tutaj .

David Gouveia
źródło