Lors de la conception d'un jeu multijoueur en réseau où un joueur héberge et d'autres se connectent, il y a deux stratégies que je connais:
- Que le jeu du joueur hôte soit l'autorité , tous les autres joueurs en tant que clients muets essayant de rattraper l'état de jeu actuel. Dans le code, il devra y avoir beaucoup de cas particuliers, selon que le joueur actuel est l'hôte ou non.
- Faites de l'hôte un client muet comme tout le monde en exécutant un serveur dédié caché sur un autre thread. Le serveur dédié sera l'autorité et l'hôte s'y connectera comme tout le monde (via localhost).
Quels sont les avantages / inconvénients de chacun d'eux? Lequel est le plus utilisé (ou varie-t-il selon le type / la taille du jeu)?
game-design
networking
multiplayer
BlueRaja - Danny Pflughoeft
la source
la source
Réponses:
L'approche dumb-client est la meilleure d'un point de vue pur: elle limite fortement la quantité de code différent dont vous avez besoin entre l'hôte et les clients et permet au serveur de s'exécuter de manière asynchrone. L'inconvénient est que la machine de l'hôte nécessite des ressources supplémentaires, mais je suppose que c'est toujours le cas.
la source
Entre ces deux options, l'approche du client stupide est certainement la meilleure pour les raisons mentionnées par DeadMG.
Il existe une autre option qui fait de chaque client une autorité, elle a l'avantage du client muet que tous les pairs partagent le même code. L'autre avantage est que cela pourrait être beaucoup plus équitable si vous définissez les bonnes règles car personne n'a l'avantage de 0-lag-to-server.
Cela peut bien sûr être assez délicat à mettre en œuvre selon le type de jeu. Votre protocole devra gérer la résolution des conflits entre pairs, en utilisant probablement une sorte de schéma de propriété. Ne laissant que les conflits où 2 pairs revendiquent la propriété du même objet de jeu.
Googler les protocoles multijoueurs Peer-2-Peer pourrait vous donner plus de détails sur cette approche.
la source