Atualmente no meu jogo, o cliente nada mais é do que um renderizador. Quando o estado de entrada é alterado, o cliente envia um pacote ao servidor e move o player como se estivesse processando a entrada, mas o servidor tem a palavra final na posição.
Isso geralmente funciona muito bem, exceto por um grande problema: cair das arestas. Basicamente, se um jogador estiver caminhando em direção a uma borda, digamos um penhasco, e parar logo antes de sair da borda, às vezes um segundo depois, ele será teleportado para fora da borda. Isso ocorre porque o pacote "Parei de pressionar W" é enviado depois que o servidor processa as informações.
Aqui está um diagrama de atraso para ajudá-lo a entender o que quero dizer: http://i.imgur.com/Prr8K.png
Eu poderia apenas enviar um pacote "W Pressed" a cada quadro para o servidor processar, mas isso pareceria uma solução dispendiosa em largura de banda.
Qualquer ajuda é apreciada!