Skocz do zawartości
  • 0
oLuju

Lekkie lagi przez Dedykowany Server

Pytanie

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ć.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

8 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Zdefiniuj lekkie lagi. Jaki jest ping i jaki protokół połączenia?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

No wiadomo, że nie będziesz otrzymywał pakietów 60 razy na sekundę :) 

Musisz użyć np interpolacji.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
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).

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Cytuj

 i co jakiś czas dodatkowo faktyczną pozycję

Oczywiście, nie teleportuj gracza tylko w tym przypadku użyj liniowej interpolacji

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Jak jest za duża różnica, i tak wyjdzie teleport z interpolacji.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×