Eh bien, vous avez des réponses, mais votre vraie réponse est «essayez-vous». Les choses diffèrent d'un jeu à l'autre.
J'ai fait quelques jeux multijoueurs pour un cours de conception de jeux en réseau distribué. Le plus difficile était de faire un jeu d'action en temps réel où de nombreux joueurs étaient impliqués et envoyaient des contributions comme l'enfer. À ce stade, tout devient problématique. Comme vous voyez le premier lien envoyé par Tetrat, même la détermination d'une collusion devient un problème. Et vous lirez-entendrez des termes comme décalage, interpolation, extrapolation, prédiction ... Mais si vous ne vous êtes jamais essayé à coder à partir de zéro, vous n'accepterez que ces mots et vous ne sauriez pas ce qu'ils signifient vraiment.
Ma recommandation est:
Étape 1
Commencez avec une conception basée sur serveur entièrement autorisée pour l'instant. Comme vous l'avez dit, il suffit d'envoyer des entrées utilisateur au serveur et de laisser le serveur faire tout et les clients obtiennent les résultats. Votre jeu fonctionnera parfaitement. Mais quand vous regardez vos clients, vous remarquerez des retards, des problèmes de téléportation, pas de mouvement en douceur ... ect.
Étape 2
Commencez à résoudre les problèmes côté client. Les problèmes de téléportation par exemple. Votre personnage était à (0,0) et le serveur a dit que vous étiez maintenant à (100,100). Votre personnage se téléportera juste à (100,100), ce qui n'est pas agréable. Voici l'interpolation. Vous devriez avoir un code côté client qui fera glisser le caractère de (0,0) à (100, 100) de manière fluide. Oui, vous déplacerez votre personnage de (0,0) à (100,100) mais à quelle vitesse? Pour l'instant, vous pouvez simplement utiliser le décalage horaire entre chaque mise à jour du serveur. Si votre serveur envoie 10 paquets en une seconde, cela signifie un délai de 100 ms entre chaque paquet.
Étape 3
Maintenant, votre jeu est déjà bon pour les réseaux rapides où il y a un retard de (1-50) ms. Mais il est condamné s'il y a une perte de paquets, une latence élevée ou un calcul long sur le serveur ... ect. Dans ces situations, vous remarquerez que lorsque vous appuyez sur la flèche gauche, vous verrez votre personnage se déplacer vers la gauche avec un retard de 200 ms. Le délai entre votre paquet va au serveur, le temps de calcul et vous revient avec votre dernière position. C'est mauvais, le pire inconvénient de la conception autorisée par le serveur. Le joueur veut que son personnage se déplace vers la gauche dès qu'il appuie sur la gauche, vous ne pouvez pas le faire attendre. Heureusement, le client a également le même code que le serveur, alors pourquoi ne pas l'exécuter immédiatement sur le client et fixer le résultat final avec la réponse du serveur? C'est ce qu'est fondamentalement la prédiction d'entrée. Le client appuie sur la gauche, le code de son côté le déplace vers la gauche, après un certain temps, disons 200 ms, la position réelle provient du serveur et le client corrige sa position avec lui. Si tout s'est bien passé, le client ne remarquera rien, "l'étape 2" nous aidera également avec cela.
Eh bien, net a de nombreux tutoriels et des choses sur ce sujet. Mais il y en a 2 que j'aime beaucoup:
Vraiment bien, couvre les taches sombres: Réseau multijoueur du moteur source-valve
Type d'histoire, amusant à lire et qui en vaut la peine: 1500 Archers sur 28.8 ,