Skocz do zawartości

Lekkie lagi przez Dedykowany Server


oLuju

Rekomendowane odpowiedzi

Przez ostatni rok doszkalałem się w pisaniu gier Multiplayer w GM. Po tak długim czasie udało mi się napisać server dedykowany w JS. Wszystko śmiga: kolejka, lobby, przesyłanie danych. O ile w sieci lokalnej (gdy server działał na Raspberry Pi'u) nie było żadnych odczuwalnych lagów to tak po przerzuceniu plików na zewnętrzny hosting (DigitalOcean) pojawiły się drobne ściny. Czy ma ktoś może jakieś pomysły co gra (lokalnie) mogłaby robić by "zamaskować" lekką desynchronizację?

Server korzysta tylko z biblioteki 'net' - jeśli to ona może negatywnie wpływać na jakość połączenia, dajcie znać.

Odnośnik do komentarza
Udostępnij na innych stronach

Postać innego użytkownika nie porusza się płynnie - zamiast sunąć po ziemi lekko skacze w danym kierunku. Ping to stabilne 63ms. Typ połączenia to TCP.

Generalnie nie są to duże skoki i da się to przeżyć, jednak chciałbym upłynnić ten ruch w 100%. Nie mam jednak pomysłu jak - myślałem nad przechowywaniem kilku pakietów (np. 3) w tablicy i wedle zawartych w nich danych tworzyć ścieżkę po której poruszałoby się widmo innego gracza. Niestety tworzyłoby to dodatkowe opóźnienie bo skrypt czekałby nie na 1 a na kilka pakietów by poruszyć danym obiektem.

 

EDIT:

Wygląda to mniej więcej tak:

254ee10f0e948.gif

Odnośnik do komentarza
Udostępnij na innych stronach

Każda gra multiplayer używa jakiegoś typu interpolacji, co więcej nawet stosuje się takie rzeczy jak wyprzedzanie zachowań gracza by upłynnić ruch. Tzn gra domyśla się sama co zamierza gracz zrobić i rusza już postacią zanim dotarła o tym informacja. W krótkich odstępach czasu zwykle się to sprawdza a jak gracz zrobi coś niespodziewanego to następuje korekta ruchu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
Dnia 21.04.2018 o 17:43, I am Lord napisał:

Każda gra multiplayer używa jakiegoś typu interpolacji, co więcej nawet stosuje się takie rzeczy jak wyprzedzanie zachowań gracza by upłynnić ruch. Tzn gra domyśla się sama co zamierza gracz zrobić i rusza już postacią zanim dotarła o tym informacja. W krótkich odstępach czasu zwykle się to sprawdza a jak gracz zrobi coś niespodziewanego to następuje korekta ruchu.

Kto gra dużo online, na pewno widział cofające lub skaczące postaci, które tak się zachowują.

 

Ogólnie zasada powinna być taka, że przesyłasz np. kierunek i prędkość i co jakiś czas dodatkowo faktyczną pozycję. Jak różnica jest większa niż np. 5 pikseli rób korektę. Może to wyjść lepiej, ale oczywiście poeksperymentuj z ustawieniami. Albo np. wysyłaj pozycję krok naprzód, tj. x+lenghtdir_y(speed,direction), y+lengthdir_y(speed,direction). Jak nie korzystasz z wbudowanej zmiennej speed, to obliczysz prędkość na podstawie point_distance(xprevious,yprevious,x,y), a kierunek analogicznie przez point_direction(xprevious,yprevious,x,y). Jak korzystasz z vspeed i hspeed, to speed i direction powinny ustawiać się same, ale jeśli jest problem, to wciąż obliczysz je za pomocą poprzednich funkcji, podstawiając (0,0,hspeed,vspeed).

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...