Para economizar largura de banda no meu jogo multiplayer , não atualizo todos os objetos a cada tick de servidor, mas cada objeto possui um updateRate que informa ao jogo que se espera que esse objeto seja atualizado a cada tick de servidor X.
Quando recebo uma mensagem de atualização para um objeto, calculo o tempo que espero que a próxima atualização chegue:
origin = serverCurrentPosition
diff = serverNextPosition - origin
arriveTime = now + timeBetweenTicks * updateRate
Ao desenhar o objeto, calculo o tempo restante até a próxima atualização e interpolo a posição de acordo:
step = 100 / timeBetweenTicks * updateRate
delta = 1 - step * ((arriveTime - now) / 100)
position = origin + diff * delta
Funciona ... mas ainda há um pouco de instabilidade no desenho, embora, na minha teoria, tudo deva dar certo, pois a escala deve cuidar de certa quantidade de atraso, deveria?
Portanto, a questão aqui é: essa é a melhor abordagem? Devo colocar o atraso real no cálculo? Se sim, como eu faria isso? Fiz algumas experiências, mas o tremor só piorou.