Je suis un développeur de jeux débutant et j'ai fait des recherches sur les jeux multijoueurs. J'ai observé qu'il y a toujours une certaine latence, les joueurs reçoivent toujours des mises à jour des actions passées. Mais il existe des techniques telles que le calcul des morts pour gérer la latence. Je peux prédire le mouvement et rendre les mouvements fluides. Mais comment pourrais-je synchroniser des actions comme sauter, arrêter de marcher, etc.
Supposons que le client A se déplace, il se trouve à 100 m à 10,2 heure avec une vitesse de 100 m / s et envoie cette information. Le client B recevrait ces informations un peu plus tard, que ce soit 10.4. Donc, au client B, je peux utiliser la prédiction et placer le client A à 120 m. Mais que se passe-t-il si, le client fait un saut à 110m à 10,3. Je ne peux pas prédire cela et depuis que j'utilise la prédiction, je ne peux pas montrer au client un saut dans le passé.
Je peux résoudre ce problème en n'envoyant pas du tout d'action de saut. Mais que se passe-t-il si mon jeu comporte des vides où les joueurs peuvent tomber et mourir. Donc, si je ne synchronise pas les actions de saut, les autres joueurs remarqueront qu'un joueur courait, puis il tombe dans le vide et réapparaît à l'écran détruisant l'engagement visuel.
Jump n'est qu'un exemple, il peut y avoir de nombreux scénarios où la prédiction ne peut pas fonctionner. Alors, comment y faire face. Un tel exemple peut être les jeux d'arène de combat multijoueurs en ligne comme Awesomenauts.
la source
Réponses:
L'estimation des morts peut ne pas être la meilleure idée dans ce cas; vous devez faire une interpolation d'entité (en rendant efficacement les autres joueurs dans le passé, ce qui vous donne toujours des positions réelles et valides). J'ai écrit à ce sujet avec beaucoup plus de détails ici . Le fait que voir ou non des joueurs légèrement dans le passé soit acceptable ou non dépend des détails de ce que vous essayez de faire.
la source
Il existe une description assez détaillée du moteur source. Il semblerait qu'une partie du code source pertinent soit également disponible dans le cadre du SDK source.
https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Il utilise un certain nombre de techniques pour essayer de gérer la latence du réseau dans un modèle serveur-client. Le point principal semble être que le client local gère les entrées et autres événements localement comme s'il n'y avait pas de serveur, puis traite la possibilité que le serveur dise que le client l'a mal fait plus tard.
la source