Jak możesz modelować „ślady zapachowe” w grze?


11

Powiedzmy, że chcesz stworzyć grę 3D i mieć graczy lub telefony komórkowe, które będą w stanie trakować inne byty, podążając ich śladami zapachowymi. Czy istnieje znana struktura danych pasująca do tego przypadku użycia?

Jeśli masz tylko kilka osób, prawdopodobnie możesz zrobić coś w rodzaju mapy współrzędnej 3D z identyfikatorem bytu, ale prawdziwy zapach działa inaczej, ponieważ z czasem zanika, ale powoli. I przez większość czasu możesz wiedzieć tylko w przybliżeniu, co tam poszło, i w przybliżeniu, ile tego typu rzeczy tam poszło. Z czasem przybliżenie staje się coraz gorsze, dopóki nie zniknie.

Wyobrażam sobie, że to trochę tak, jakby zaczynało się od dokładnej liczby i powoli traciło najmniej znaczące cyfry, aż do utraty największej cyfry. Ale to tak naprawdę mi nie pomaga, ponieważ identyfikatory jednostek zwykle nie są kodowane tak, aby zawierały typ jednostki, oprócz jej indywidualnego identyfikatora.


Dwarf Fortress robi coś takiego w następnym wydaniu.
Russell

Odpowiedzi:


10

Istnieje wiele różnych sposobów, w jaki możesz to zrobić; Mam zamiar zasugerować „oczywiste dla mnie” wybory, ale istnieje wiele wariantów, które można zaprojektować. Oświadczenie: W rzeczywistości nie zaimplementowałem czegoś takiego.

Po pierwsze, potrzebujesz struktury danych obejmującej Twój świat. Jeśli wykonujesz ruch NPC w przestrzeni 3D, prawdopodobnie masz taką strukturę lub będziesz jej potrzebować do celów szukania ścieżki - powiedzmy, siatki nawigacyjnej. Załóżmy, że możemy dodać do tego pole zapachów.

Co zatem umieszczamy w tej dziedzinie? Proponuję listę zapisów ( zapach , siła , czas ). Ta lista jest utrzymywana na maksymalnej długości lub poniżej i sortowana według siły - tak słabe zapachy zostaną odrzucone. Zapach mógłby być coś wyraźnie określone dla każdego typu jednostki lub podmiotu, lub może to być po prostu typem podmiot - w zależności od tego, co chcesz, aby móc śledzić wyraźnie. Czas jest znacznik czasu, gdy ten rekord zapach był ostatnio aktualizowany.

Kiedy istota przechodzi przez obszar (np. Dany trójkąt siatki nawigacyjnej), czas zaktualizować listę zapachów. Po pierwsze, zmniejsz wszystkie mocne strony zgodnie z upływem czasu zgodnie z wartością czasu w stosunku do bieżącego czasu - rozkład wykładniczy jest prawdopodobnie rozsądnym wyborem tutaj. Następnie dodaj zapach bieżącej encji do listy, być może o sile zależnej od typu encji. Następnie, jeśli lista jest zbyt długa, odrzuć najniższą siłę.

Aby uzyskać wynik śledzenia, znajdź zapach na liście dla bieżącej lokalizacji, a następnie zrób to samo dla wszystkich jego sąsiadów i idź w kierunku najsilniejszego zapachu (to nie jest kierunek, z którego właśnie przyszedł tropiciel).

Dla dodatkowego realizmu:

  • Dyfuzja: okresowo przesyłaj ułamek zapachu w każdym miejscu sąsiadom. To dezorientuje szlaki, ale oznacza również, że można wywęszyć nieruchome rzeczy (znalezienie jedzenia, martwych ciał itp.) (Jest to nawet uznany rodzaj sztucznej inteligencji, który opiera działania całkowicie na tego rodzaju informacjach - krajobraz dostarcza informacji o tym, w jaki sposób udać się, aby uzyskać określony zasób itp. Nie pamiętam jego nazwy.) Główną wadą jest czas spędzony wszędzie obliczanie dyfuzji.

  • Silne zapachy powinny zapobiegać wykrywaniu słabych zapachów; podziel siłę poszukiwanego zapachu przez siłę najsilniejszego zapachu i zawiedz, jeśli jest on zbyt mały. To może pozwolić na celowe zagubienie śladu zapachowego.


9

Zmodyfikowałbym technikę zwaną mapowaniem wpływów, aby stworzyć mapę zapachów. Naturalnie rozproszy się i zniknie, połączy się i będzie konkurować z innymi zapachami i prawdopodobnie więcej. Wygląda na to, że zrobi dokładnie to, czego potrzebujesz, ale może być bardziej skomplikowane niż to, co chcesz wdrożyć. Przynajmniej powinien dać ci kilka dobrych pomysłów i jest dość prosty do wdrożenia na dowolnej strukturze, której obecnie używasz.

Samouczek / wyjaśnienie uważam za pomocne.

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.