Estou implementando um clone de asteróides multiplayer para aprender sobre a arquitetura de rede cliente / servidor em jogos. Passei um tempo lendo as publicações da GafferOnGames e da Valve em sua tecnologia de cliente / servidor. Estou tendo problemas com dois conceitos.
Atualmente, tenho um servidor de jogos autoritário simulando física com box2d e enviando o estado do mundo para clientes cerca de 20 vezes por segundo. Cada cliente monitora os últimos instantâneos recebidos e lê entre dois estados para suavizar o movimento dos sprites. No entanto, não é tão suave. Pode ser suave por um tempo, depois brusco, depois voltar a suavizar etc. Tentei o TCP e o UDP, ambos são praticamente iguais. Alguma idéia de qual possa ser meu problema? (Nota: eu implementei isso para um único jogador primeiro, e o movimento do sprite é perfeitamente suave a 60fps ao atualizar o mundo da física apenas 20 vezes por segundo).
Para resolver o primeiro problema, pensei que talvez o cliente também devesse executar uma simulação box2d e apenas atualizar as posições de seus sprites para corresponder aos instantâneos do servidor quando eles não coincidem. Eu pensei que isso poderia ser mais suave, pois a minha implementação single player é suave. isso é uma boa ideia?
Mesmo se não resolver o problema acima, é necessário fazer previsões do lado do cliente? Por exemplo, se um jogador tentar mover sua nave, como saberá se atingir um asteróide, muro ou nave inimiga sem uma simulação de física? Parece que a nave deles parece passar pelo objeto com o qual deve colidir antes de receber um instantâneo do servidor que diz que atingiu o objeto.
Obrigado!