Estou criando meu primeiro jogo online usando o socket.io e gostaria que fosse um jogo multiplayer em tempo real como agar.io ou diep.io.
Mas me deparei com a questão de tentar descobrir como fazer com que todos os computadores funcionem na mesma velocidade.
Eu tenho três idéias para modelos, mas nenhuma delas parece certa, e me pergunto como os videogames normais fazem isso. (Você pode pular a leitura das minhas idéias; elas apenas fornecem uma maneira de ver os problemas que estou tendo.)
O servidor permite que os clientes executem por conta própria e transmitam atualizações ao servidor, que as transmite para o restante dos clientes. Isso tem o problema de que alguns computadores rodam mais rápido que outros, permitindo que eles sejam atualizados mais rapidamente e se movam pela tela mais rapidamente.
Peça ao servidor que informe aos clientes quando atualizar. Posso então esperar até o último cliente responder (uma péssima idéia no caso de uma pessoa ter um computador lento), esperar até o primeiro cliente responder (novamente, aguardando a comunicação antes de cada quadro) ou apenas enviá-lo o mais rápido possível (o que parece ter o mesmo problema que o número 1).
No início do jogo, peça ao servidor que informe aos clientes a velocidade de atualização. Isso significaria que o cliente seria responsável por restringir o movimento entre esse período. Por exemplo, se alguém conseguisse pressionar um botão duas vezes nesse período, enviaria apenas um evento de pressionamento de botão. Isso tem o problema de que algumas ações seriam ignoradas (como pressionar o botão duplo) e que a interação dependeria do relógio do cliente, que pode não corresponder ao relógio do servidor. O servidor precisará acompanhar cada cliente e garantir que suas atualizações sejam enviadas no momento correto.
Eu fiz algumas pesquisas , mas os artigos que li não parecem abordar especificamente o que fazer se um cliente enviar atualizações mais rapidamente do que outros clientes.
No meu caso particular, estou lidando com pessoas que possuem velocidades de teclado mais rápidas (o computador deles enviaria mais atualizações de teclado do que outros computadores).
Como os programadores geralmente lidam com isso?