Mam wroga bossa szukającego ścieżki, który szuka gracza za pomocą algorytmu A *. Jest to dość złożone środowisko i robię to we Flashu, więc wyszukiwanie może być nieco wolniejsze, gdy przeszukuje duże odległości. Gdyby odtwarzacz był nieruchomy, mógłbym wyszukać tylko raz, ale w tej chwili szukam każdej klatki. Trwa to wystarczająco długo, że cierpi mój klatek na sekundę.
Jakie jest zwykle to rozwiązanie? Czy istnieje sposób na „przeplanowanie” A * bez ponawiania całego wyszukiwania? Czy powinienem po prostu przeszukiwać trochę rzadziej (co pół sekundy lub sekundę) i zaakceptować, że na ścieżce będzie trochę niedokładności?
źródło
Możesz użyć wykrywania bliskości, aby uruchomić algorytm co kilka klatek, jeśli odległość jest bardzo duża (ponieważ w większości przypadków, jeśli odległość jest duża, ścieżka docelowa nie zmieni się drastycznie z klatki na klatkę). Na przykład:
Zakłada się, że istnieje odległość, w której uruchomienie A * każdej klatki ma wydajność, która jest nadal akceptowalna. Krótko mówiąc, wybrałbym drugą opcję. Zwłaszcza jeśli to, co masz, działa, unikałbym ponownego wdrożenia czegoś innego, gdybym mógł po prostu przeskalować to, co działa dobrze. Najważniejsze jest to, że musisz go wypróbować, aby sprawdzić, czy działa w twojej grze.
źródło
Nie odpowiadając dokładnie na twoje pytanie, ale ... jeśli chcesz „oszukiwać”, możesz sprawić, że gracz opuści „bułkę tartą” i poprosi szefa, by za nimi podążał. Jeśli ścieżka bułki tartej przecina się sama, postępuj zgodnie z najnowszą (powoduje to, że boss omija pętle i inne ścieżki, które mogą być za długie, nie wspominając o tym, że nie podąża dokładnie ścieżką gracza)
To by działało dobrze, gdyby szef był jakimś zwierzęciem o dobrym węchu. To działałoby podobnie jak podążanie za zapachem odtwarzacza :)
źródło
Twoja sprawa jest w zasadzie tym, czym HPA * został wymyślony. Jeśli jednak wydaje się to przesadne, zwykle uważam, że odnajdywanie ścieżek co pół sekundy powinno się udać.
źródło
Jeśli jest to środowisko statyczne, możesz wstępnie obliczyć najkrótszą ścieżkę dla wszystkich par.
źródło
Stworzyłem grę na 48 rozgrywek, w której postać A * podąża za graczem wokół poziomu. Ponieważ moja implementacja A * była powolna (nie mogła uruchomić każdej ramki), ustawiłem interwał z 3-sekundowym opóźnieniem. Miało to niezamierzony efekt polegający na tym, że gracz mógł „oszukać” sztuczną inteligencję przez kilka chwil. To sprawiło, że gra była przyjemniejsza.
Później poprawiłem wydajność implementacji A * i próbowałem uruchomić ją na każdej ramce. Gra przestała być zabawna, ponieważ wróg zawsze doskonale szukał gracza.
To było nieoczekiwane i dobre doświadczenie edukacyjne.
źródło
O ile absolutnie nie chcesz (lub nie potrzebujesz) używać A *, możesz także zapoznać się z Zachowaniami Sterowania . Ponieważ nie ma pełnego planowania ścieżki dla każdej klatki, przetwarzanie powinno być znacznie lżejsze.
źródło