Skocz do zawartości

39dll - płynne porusznie graczy


Rekomendowane odpowiedzi

Witam ponownie,

 

Piszę prostą grę multiplayer używając 39dll i napotkałem "problem" dotyczący uaktualniania pozycji graczy w kliencie.

 

Mianowicie nie potrafię znaleźć optymalnego sposobu na poruszanie graczy, aby ich pozycje u innych klientow były jak najbardziej adekwatne do ich rzeczywistej pozycji.

Wiem na pewno że nie mogę wysyłać ich pozycji zbyt często, co na pewno rozwiązałoby problem, ale zalagowało serwer. Staram się wysyłać co 1 sekundę z klienta, a następnie po odebraniu na serwerze rozsysłam do innych klientów.

Następnie na kliencie poruszam obiekt gracza w kierunku odebranej pozycji. Jednakże metoda ta z góry zakłada opóźnienie na kliencie 1sek + czas przemieszczenia gracza do nowej pozycji.

Czy istnieje jakiś inny sposób? Wiem że można od razu umieszczać gracza na odebranej pozycji, a następnie poruszac go na ślepo w tym samym kierunku, co gwarantuje brak opóźnienia, ale za to przekłamania w jego aktualnej pozycji, a jeżeli gracz się zatrzyma to prawdopodobne "skoki" w tył ;)

 

Pozdrawiam i z góry dzięki za zainteresowanie problemem :sleep1:

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz wysyłać z klienta informację o tym że wcisnąłeś klawisz i dopóki jest wciśnięty to serwer cię porusza.

Klient powinien być tylko graficznym przedstawieniem tego co się dzieje na serwerze. Nie powinien decydować np. o szybkości ruchu.

Odnośnik do komentarza
Udostępnij na innych stronach

Zastanawiam się na ile optymalnym rozwiązaniem byłoby np. wysyłanie jedynie kierunku, ale cześciej (np. co 10ms) oraz wiadomości o rozpoczęciu i zatrzymaniu ruchu. Klient od momentu otrzymania wiadomości o starcie poruszałby gracza cały czas zmieniając jedynie kerunek do momentu otrzymania wiadomości o zatrzymaniu.

Odnośnik do komentarza
Udostępnij na innych stronach

Zastanawiam się na ile optymalnym rozwiązaniem byłoby np. wysyłanie jedynie kierunku, ale cześciej (np. co 10ms) oraz wiadomości o rozpoczęciu i zatrzymaniu ruchu. Klient od momentu otrzymania wiadomości o starcie poruszałby gracza cały czas zmieniając jedynie kerunek do momentu otrzymania wiadomości o zatrzymaniu.
Jeżeli dobrze zrozumiałem o co Ci chodzi, to raczej nie jest dobry pomysł. Jak złapie lag, to gracza wywali gdzieś np: w ścianie...
Odnośnik do komentarza
Udostępnij na innych stronach

Trzynasty: To zależy co masz na myśli mówiąc("pisząc" właściwie) ważne dane, jeśli chodzi o pozycje to można przesłać tylko wciśnięcie klawisza, i co jakiś czas(np sekunde) wysyłać poprawkę, i dodatkowo przy puszczeniu klawisza wysłać pozycje.

 

Utermiko: Ja bym się denerwował jak bym wciskał klawisz i czekał nie całą sekundę żeby się poruszyć :P( Jeśli dobrze zrozumiałem o co Tobie chodzi ).

Odnośnik do komentarza
Udostępnij na innych stronach

Trzynasty: To zależy co masz na myśli mówiąc("pisząc" właściwie) ważne dane, jeśli chodzi o pozycje to można przesłać tylko wciśnięcie klawisza, i co jakiś czas(np sekunde) wysyłać poprawkę, i dodatkowo przy puszczeniu klawisza wysłać pozycje.
"jedynie kierunku" to chyba chodzi o brak poprawek ;)
Odnośnik do komentarza
Udostępnij na innych stronach

Utermiko: Ja bym się denerwował jak bym wciskał klawisz i czekał nie całą sekundę żeby się poruszyć :P( Jeśli dobrze zrozumiałem o co Tobie chodzi ).

Różnica ~100 ms chyba nie jest aż tak zauważalna. W sumie to zależy o jakiego typu grze mowa.

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