Pierwszą grę online tworzę przy użyciu socket.io i chciałbym, aby była to gra wieloosobowa w czasie rzeczywistym, taka jak agar.io lub diep.io.
Ale natknąłem się na problem z ustaleniem, jak sprawić, by wszystkie komputery działały z tą samą prędkością.
Mam trzy pomysły na modele, ale żaden z nich nie wydaje się odpowiedni i zastanawiam się, jak robią to normalne gry wideo. (Możesz pominąć czytanie moich pomysłów; dają one tylko sposób na sprawdzenie problemów, które mam).
Serwer pozwala klientom na samodzielne uruchamianie i przekazywanie aktualizacji na serwer, który następnie przesyła je pozostałym klientom. Ma to problem polegający na tym, że niektóre komputery działają szybciej niż inne, pozwalając im na szybszą aktualizację i szybsze poruszanie się po ekranie.
Niech serwer poinformuje klientów, kiedy należy zaktualizować. Mogę wtedy poczekać, aż ostatni klient odpowie (straszny pomysł, jeśli jedna osoba ma powolny komputer), poczekać, aż pierwszy klient odpowie (ponownie, czekając na komunikację przed każdą ramką), lub po prostu wysłać go tak szybko, jak to możliwe (co wydaje się napotykać ten sam problem co numer 1).
Na początku gry poproś serwer, aby powiedział klientom, jak szybko dokonać aktualizacji. Oznaczałoby to, że klient byłby odpowiedzialny za ograniczenie ruchu między tym okresem. Na przykład, jeśli komuś uda się w jakiś sposób dwukrotnie nacisnąć przycisk w tym okresie, wyśle tylko jedno zdarzenie naciśnięcia przycisku. Ma to problem polegający na tym, że niektóre działania będą ignorowane (np. Podwójne naciśnięcie przycisku), a interakcja będzie zależała od zegara klienta, który może nie być zgodny z zegarem serwera. Serwer musiałby wówczas śledzić każdego klienta i upewnić się, że jego aktualizacje są przesyłane we właściwym czasie.
Przeprowadziłem pewne badania , ale artykuły, które czytam, wydają się nie dotyczyć tego, co zrobić, jeśli klient wysyła aktualizacje szybciej niż inni klienci.
W moim szczególnym przypadku mam do czynienia z osobami, które mają większą szybkość klawiatury (ich komputer wysyła więcej aktualizacji klawiatury niż inne komputery).
Jak programiści zwykle sobie z tym radzą?