Płynnie podążać ścieżką


9

Obecnie tworzę grę obrony wieży 2d ze statyczną, z góry określoną ścieżką, którą podążają wrogowie (tzn. Wieże nie mogą blokować ścieżki, a znalezienie ścieżki nie jest problemem, który próbuję rozwiązać).

Próbuję wymyślić, jak dokładnie sprawić, by jednostki płynnie podążały tą ścieżką . Mam dwa ogólne pomysły na to, jak to zrobić, ale chciałbym mieć pewien wkład, który może być łatwiejszy do wdrożenia / bardziej standardową technikę. Lub oczywiście, jeśli istnieje jakiś zupełnie inny sposób, którego nie brałem pod uwagę, chętnie się o tym dowiem.

Punkty trasy: Moim pierwszym pomysłem było zdefiniowanie ścieżki jako szeregu zakodowanych punktów trasy. Następnie jednostki wykorzystywałyby podstawowy algorytm „wyszukiwania” (taki jak ten ), aby przemieszczać się kolejno do każdego punktu na drodze. Zastanawiałem się jednak, czy może być trudno powstrzymać jednostki przed zbyt dużym odchyleniem się od linii, którą chcę podążać. Zastanawiam się, czy niemożność gwałtownego skrętu może spowodować, że „ześlizgną się” z pożądanej linii. Podejrzewam jednak, że mógłbym temu zapobiec, pozwalając na zastosowanie stosunkowo silnej siły kierującej?

Krzywe Béziera: Drugim rozważanym przeze mnie rozwiązaniem jest zdefiniowanie ścieżki za pomocą krzywej Béziera i za każdym razem obliczenie punktu wzdłuż krzywej za pomocą (dt * prędkości) od aktualnej lokalizacji urządzenia. Podejrzewam, że ta technika znacznie ułatwiłaby precyzyjne określenie ścieżki, którą podążą jednostki, ale nie wiem, jak dokładnie to zrobić. Jakieś sugestie?

Też nie zmieni to niczyich odpowiedzi, ale jednostki również muszą być w stanie podróżować ze stałą prędkością wzdłuż ścieżki. Dodatkowo programuję tę grę w Pythonie przy użyciu frameworka.

Jeśli coś jest niejasne, daj mi znać.

Edycja: Również za wszelką cenę próbuję odtworzyć zachowanie ruchowe wrogów w Szarży Królestwa .


Istotne: gamasutra.com/view/feature/131505/... Jakiego rodzaju gęstości / wielkości jednostek w stosunku do płytek używasz?
małpa

Rzucę okiem na ten artykuł! Jednak tak naprawdę nie używam kafelków, tylko ciągłe współrzędne do wyznaczenia pozycji. Pojawi się tylko statyczny obraz tła, który pokazuje gracza, w którym miejscu będą się poruszać jednostki.
Pwnosaurus

Też znalazłem. gamedev.stackexchange.com/questions/26543/… A * działa na mapach innych niż grid. Może to być ścieżka węzła w królestwie, która jest zakrzywiona w podobny sposób.
małpa

Czy jest coś, co może zmusić wrogów do opuszczenia ścieżki i powrotu na nią? Pytam, ponieważ twoja propozycja krzywej Beziera sugeruje, że nie ma, w którym to przypadku nie ma powodu, dla którego nie można wstępnie obliczyć arbitralnych danych o całej ścieżce i nie jest potrzebna logika „AI”.
Kevin Reid

Odpowiedzi:


8

Pozwól, że przedstawię ci słynny artykuł Craiga Reynoldsa na temat zachowań sterujących dla postaci autonomicznych . Jeśli go nie przeczytałeś, powinieneś, pomoże ci to przemyśleć tego rodzaju problemy, w szczególności spójrz na sekcję dotyczącą znajdowania ścieżek .

wprowadź opis zdjęcia tutaj

Ideą artykułu Reynoldsa jest to, że można użyć prostych sił, które łączą się, tworząc realistyczną, improwizacyjną nawigację po środowisku. Ruchy nie są oparte na planowaniu ścieżek lub obliczeniach globalnych, ale zamiast tego wykorzystują informacje lokalne, takie jak siły sąsiadów, co czyni je łatwymi do zrozumienia i wdrożenia, ale nadal generują bardzo złożone wzorce ruchów.

Piękno tego podejścia polega na tym, że można połączyć kilka zachowań razem. Na przykład, twoje postacie mogą mieć zarówno zachowanie podczas poszukiwania ścieżki, jak i zachowanie separacji (aby nie dopuścić do nadmiernego zlepiania się), które można łączyć jako sumę ważoną.

Inną korzyścią z używania zachowań sterujących jest to, że istnieje wiele istniejących implementacji open source w różnych językach (np. Opensteer ).


AKTUALIZACJA: Rzuciłem okiem na Kingdom Rush i myślę, że mogłem źle zrozumieć, co masz na myśli przez „gładko”. Uznałem to za bardziej realistyczne, ale myślę, że to, czego szukasz, bardziej przypomina postacie na torze kolejowym. Ponadto, uważniej czytając, widzę, że jednym z waszych wymagań jest to, że „jednostki muszą być w stanie podróżować ze stałą prędkością wzdłuż ścieżki”. Zachowania związane z kierowaniem nie zapewnią stałej prędkości ruchu, ale proste wyszukiwanie ścieżki w połączeniu z punktami trasy. (Tj. Nie używaj zachowania „szukaj”, aby dostać się do punktu, zamiast tego po prostu określ wektor kierunku i pozwól jednostce poruszać się z pełną prędkością do tego punktu.) Użyj większej liczby punktów, aby wygładzić trasę.


2

Rozwiązaniem w tym artykule Gamasutra może być to, czego szukasz. Podstawową ideą jest rzucanie promieni na punkt, który jest dwa kroki przed twoim aktualnym punktem, „przeskakując” promień na ułamek długości komórki i przy każdym „krokiem” promienia sprawdzając, czy objętość zderzenia twojego gracza koliduje z czymś w schodkowej pozycji promienia. Jeśli promień dojdzie do punktu, który jest dwa kroki do przodu, możesz pozbyć się pośredniego punktu. możesz następnie kontynuować ten sam proces aż do punktu „celu” ... a zatem jeśli twoją ścieżkę można osiągnąć przez linię prostą do celu, linia prosta do celu jest drogą, którą podąży Twoja postać. oto artykuł: http://www.gamasutra.com/view/feature/131505/toward_more_realistic_pathfinding.

Zawiera także wspaniałe rzeczy dotyczące promienia skrętu i bardziej naturalnych zachowań podczas skręcania i takich ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.