Jak radzić sobie ze znalezieniem ścieżki i ruchem bytu w dużym sieciowym świecie?

12

wprowadź opis zdjęcia tutajBiorąc pod uwagę powyższy obraz z kafelkami podzielonymi na pudełka 32x32, mam byt, który jest oznaczony dla „agro” pobliskich graczy, którzy się do niego zbliżają. Chciałbym, aby ten potwór idealnie ścigał gracza (i nadal go ścigał przez jakiś czas). Obecnie mój jedyny ruch to mój prosty interpolator dla zdalnych jednostek i działa to, ponieważ luki między aktualizacjami ruchu są raczej niewielkie.

Nie mogę po prostu powiedzieć klientowi, że potwór chce przejść do pozycji, w której się znajduje, ponieważ spowoduje to, że byt porusza się znacznie szybciej niż powinien (można to prawdopodobnie rozwiązać za pomocą pewnej matematyki do interpolacji co -skuteczne), ale co ważniejsze, nie wygląda realistycznie i może przycinać ściany! Nie chcę symulować całego ruchu na serwerze, jeśli można tego uniknąć ... chociaż myślę, że mógłbym, ale nadal nie rozwiązałoby to problemu z przycinaniem. Podejrzewam, że rozwiązanie polega na wyszukiwaniu ścieżek i wysyłaniu okresowych aktualizacji węzłów klienta i umożliwieniu im symulacji ruchu, ale nie jestem pewien.

Dzięki!

Vaughan Hilts
źródło

Odpowiedzi:

9

Aby w prosty sposób rozpocząć, możesz wprowadzić zachowania kierownicze . Szczególnie szukaj zachowań . wprowadź opis zdjęcia tutaj

Oprócz poszukiwania postacie powinny unikać, aby unikać przeszkód .

wprowadź opis zdjęcia tutaj

Gdy te aspekty zaczną działać, możesz wprowadzić bardziej inteligentne obserwowanie. Obejmuje to znalezienie ścieżki. Teraz zamiast kierować się w stronę wrogów, wrogowie będą kierować się w stronę każdego węzła na ścieżce, która prowadzi ich do celu.

Gdy wróg znajdzie się „wystarczająco blisko”, możesz przełączyć się na całkowicie sterujące zachowania. Ponieważ są one tańsze niż wyszukiwanie ścieżki, a wyniki są dobre z bliskiej odległości.

Sterowanie pozwoli ci również określić maksymalne prędkości skrętu i maksymalne prędkości dla wrogów.

Sterowaniem można zarządzać na kliencie za pomocą okresowych aktualizacji z serwera, aby upewnić się, że nadal są na dobrej drodze.

MichaelHouse
źródło
Czy oznaczałoby to również symulację zachowania sterującego na serwerze, czy też mogę logicznie „przyciągnąć” obiekt wzdłuż ścieżki? Nie potrzebuję wielkiej precyzji.
Vaughan Hilts
Sam układ kierowniczy musiałby zostać zasymulowany (choć nie jest bardzo ciężki). Kierowanie w kierunku punktów orientacyjnych można jednak zaktualizować bez symulacji. Po prostu upewnij się, że klient znajduje się w zasięgu „bieżącego” punktu nawigacyjnego i kieruje się w stronę właściwego punktu nawigacyjnego jako „następnego”. Wymagałoby to trochę przyciągania, jeśli jednostka byłaby nie na miejscu i nagle zaktualizowana.
MichaelHouse
+1 za świetną odpowiedź. Dzięki za uratowanie mi kilku godzin.
Md Mahbubur Rahman,
1

Nie mogę po prostu powiedzieć klientowi, że potwór chce przejść do pozycji, w której się znajduje, ponieważ spowoduje to, że byt porusza się znacznie szybciej niż powinien (można to prawdopodobnie rozwiązać za pomocą pewnej matematyki do interpolacji co efektywny)

W rzeczywistości jest to łatwe do zrobienia. Kierunkiem ruchu będzie pozycja docelowa minus aktualna pozycja. Wszystko, co musisz zrobić, to przeskalować ten wektor do żądanej prędkości ruchu. Powtórz każdą klatkę.

ale co ważniejsze, nie wygląda realistycznie i może przyciąć ściany! Nie chcę symulować całego ruchu na serwerze, jeśli można tego uniknąć ...

Musisz zasymulować ruch na serwerze. Skąd inaczej dowiesz się, że wszyscy gracze widzą to samo zachowanie?

Będziesz potrzebował podstawowego wyszukiwania ścieżek. A * jest standardem. Możesz obliczyć ścieżkę do celu, a następnie podążanie tą ścieżką to po prostu ustawienie wektorów ruchu jak wyżej. (Lub możesz użyć zachowań sterujących jak w odpowiedzi Byte56, co jest w zasadzie takie samo z kilkoma dodanymi dodatkami).

Kylotan
źródło