Je travaille sur un moteur de jeu multijoueur serveur-client 2D (que vous pouvez essayer ici ). Il utilise les WebRTC DataChannel
. (Les connexions sont peer-to-peer, mais l'homologue hôte agit toujours comme un serveur.)
Le plus gros problème (en dehors de la connectivité) est la prédiction d'entrée locale. Nous faisons comme d'habitude: à la pression des touches, les joueurs se déplacent instantanément, indiquent à l'hôte quelles touches sont pressées, reçoivent les données de l'hôte et les comparent à la position historique. La position est corrigée dans le temps en cas de différence. Cela fonctionne bien avec une faible perte de paquets ou PDV , même si le ping est élevé.
S'il y a perte ou PDV, l'écart peut être plus important. Je pense que cela est dû au fait que si le premier paquet indiquant un changement d'entrée est retardé ou abandonné, l'hôte le découvre plus tard et commence à changer ce joueur plus tard que ne le montre sa prédiction d'entrée locale.
Si le joueur bouge, nous augmentons le montant de la correction appliquée, car elle est moins perceptible. Cela semble combler les lacunes lors du démarrage et pendant le déplacement. Cependant, toute correction est plus visible si elles s'arrêtent brusquement. Ensuite, si le PDV ou la perte signifie que l'hôte pense qu'il s'est arrêté plus tard, l'hôte dépasse, renvoie des données disant qu'il est un peu plus avancé, et la correction fait dériver un peu le joueur. Sur les connexions instables, les joueurs dérivent souvent de manière notable après s'être arrêtés.
Je ne l'ai pas remarqué dans d'autres jeux. Comment cela peut-il être atténué?