Mam wiele bytów po stronie klienta, które są symulowane (ich prędkości są dodawane do ich pozycji na podstawie ramki) i pozwalam im umrzeć. Wysyłają informacje o tym, gdzie ostatnio byli widziani oraz o zmianach prędkości. Działa to świetnie, a inni gracze widzą tę pracę. Jednak po pewnym czasie gracze ci zaczynają desynchronizować się po pewnym czasie. Wynika to z opóźnienia.
Chciałbym wiedzieć, w jaki sposób mogę interpolować między stanami, aby wydawały się znajdować we właściwej pozycji. Wiem, gdzie gracz był OSTATNI, a jego aktualna prędkość, ale interpolacja do ostatnio widzianego stanu powoduje, że gracz faktycznie porusza się do tyłu. Nie mogłem w ogóle użyć prędkości dla innych klientów i po prostu „przeciągnąć” ich w odpowiednim kierunku, ale wydaje mi się, że spowodowałoby to nierówny ruch. Jakie są alternatywy?
źródło
Kiedy powiesz:
sprawia, że myślę, że twój problem może mieć więcej wspólnego z tym, że twoje zegary zaczynają działać krokowo niż z jakimikolwiek problemami z opóźnieniami. Jeśli to opóźnienie, na początku powinno być tak samo źle, jak za 10 minut. Jeśli jeden zegar w grze działa nieco szybciej niż drugi, pojawią się dziwne artefakty jittera, które z czasem będą się pogarszać. Klient może symulować w przyszłości, kiedy obecne pakiety dotrą z serwera, odciągnie klienta z powrotem, powodując przeskakiwanie jednostek. Przeprowadź więcej testów, aby się dowiedzieć.
Jeśli niezsynchronizowane zegary gry są rzeczywiście problemem, musisz bardzo uważnie przyjrzeć się pętli aktualizacji i upewnić się, że każda aktualizacja opiera się na ilości czasu spędzonego w grze (stałej lub zmiennej) oraz że gra -time jest zaawansowany przy użyciu czegoś takiego jak zegar ścienny (nie renderuje czasu ani innych zmiennych). Gaffer ma na ten temat kilka dobrych artykułów , a tutaj jest dobre pytanie, które mówi o stałych i zmiennych krokach czasowych . Mam nadzieję że to pomoże.
źródło