oLuju Opublikowano 20 Kwietnia 2018 Udostępnij Opublikowano 20 Kwietnia 2018 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 Więcej opcji udostępniania...
Uzjel Opublikowano 21 Kwietnia 2018 Udostępnij Opublikowano 21 Kwietnia 2018 Zdefiniuj lekkie lagi. Jaki jest ping i jaki protokół połączenia? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
oLuju Opublikowano 21 Kwietnia 2018 Autor Udostępnij Opublikowano 21 Kwietnia 2018 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: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 21 Kwietnia 2018 Udostępnij Opublikowano 21 Kwietnia 2018 No wiadomo, że nie będziesz otrzymywał pakietów 60 razy na sekundę Musisz użyć np interpolacji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 21 Kwietnia 2018 Udostępnij Opublikowano 21 Kwietnia 2018 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 Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 23 Kwietnia 2018 Administratorzy Udostępnij Opublikowano 23 Kwietnia 2018 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 Więcej opcji udostępniania...
I am Lord Opublikowano 24 Kwietnia 2018 Udostępnij Opublikowano 24 Kwietnia 2018 Cytuj i co jakiś czas dodatkowo faktyczną pozycję Oczywiście, nie teleportuj gracza tylko w tym przypadku użyj liniowej interpolacji Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 24 Kwietnia 2018 Administratorzy Udostępnij Opublikowano 24 Kwietnia 2018 Jak jest za duża różnica, i tak wyjdzie teleport z interpolacji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Kwietnia 2018 Udostępnij Opublikowano 24 Kwietnia 2018 Ale zawsze będzie lepiej niż bez Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę