Wdrażam klon asteroid dla wielu graczy, aby dowiedzieć się o architekturze sieci klient / serwer w grach. Spędziłem czas czytając publikacje GafferOnGames i Valve na temat ich technologii klient / serwer. Mam problem z dwoma koncepcjami.
Obecnie mam autorytatywny serwer gier symulujący fizykę z box2d i wysyłający klientom informacje o stanie świata około 20 razy na sekundę. Każdy klient śledzi kilka ostatnich migawek, które otrzymał, i przeskakuje między dwoma stanami, aby wygładzić ruch duszków. Jednak nie jest tak gładkie. Przez jakiś czas może być gładka, potem trochę szarpana, potem z powrotem gładka itp. Próbowałem zarówno TCP, jak i UDP, oba są mniej więcej takie same. Masz pojęcie, jaki może być mój problem? (Uwaga: zaimplementowałem to najpierw dla jednego gracza, a ruch duszka jest idealnie płynny przy 60 fps przy aktualizacji świata fizyki tylko 20 razy na sekundę).
Aby rozwiązać pierwszy problem, pomyślałem, że może klient powinien również uruchomić symulację box2d i po prostu zaktualizować pozycje swoich ikonek, aby pasowały do migawek serwera, gdy się nie zgadzają. Pomyślałem, że może to być płynniejsze, ponieważ moja implementacja dla jednego gracza jest płynna. Czy to dobry pomysł?
Nawet jeśli nie rozwiąże powyższego problemu, czy jest to konieczne do przewidywania po stronie klienta? Na przykład, jeśli gracz spróbuje poruszyć swój statek, skąd będzie wiedział, czy trafił w asteroidę, ścianę lub statek wroga bez symulacji fizyki? Wygląda na to, że ich statek wydaje się przechodzić przez obiekt, z którym powinien się zderzyć, zanim otrzymają migawkę z serwera, która mówi, że uderzyła w obiekt.
Dzięki!