J'ai une interface de type pointer-cliquer sur un client, qui exécute un A * sur le serveur, pour la recherche de chemin.
Le jeu est contrôlé comme un RTS, mais le monde est persistant, donc les joueurs devraient pouvoir rejoindre / quitter à tout moment, et il n'y aura qu'une trentaine d'unités au maximum sur l'écran.
Quelle est la meilleure façon de synchroniser les mouvements du joueur entre le serveur et le client, une fois que j'ai calculé le (s) chemin (s)?
Le serveur doit-il synchroniser les clients à chaque étape / image d'animation? ou peut-il simplement dire au client "aller à la position X, Y" pour chaque nœud sur le chemin et pour chaque joueur en mouvement? Ou est-il préférable de simplement exécuter les minuteries d'animation sur le client et le serveur et de les synchroniser implicitement de cette façon?
À quoi ressemblerait l'échange de données typique pour un mouvement basé sur un chemin?
ÉDITER:
Certains d'entre vous ont suggéré le verrouillage, parce que j'ai dit "RTS", mais le jeu n'est pas un RTS, il a juste le même type d'interface. La grande différence est que je dois pouvoir faire en sorte que les joueurs rejoignent et quittent le jeu à tout moment . Désolé de ne pas être plus précis.
la source
Une fois le chemin calculé, le serveur utilise simplement ce chemin pour contrôler le personnage. La présence d'un chemin ne fait aucune différence à ce problème - vous envoyez toujours les mêmes données, que ce soit des mises à jour régulières de position ou autre. Habituellement, il est bon d'envoyer des positions régulières (interpolées sur le client pour les lisser) et un message séparé lorsque l'unité s'arrête.
la source
Dans mon jeu (un jeu de type RPG multijoueur) j'envoie des parties du chemin au client (pour les PNJ à proximité), ie. les 3 positions suivantes et le moment où le PNJ devrait être là. Pour les joueurs, j'envoie simplement la dernière position valide + son horodatage afin que sur le client, je puisse faire un calcul mort (ou quelque chose de plus élaboré si vous le souhaitez).
Cela fonctionne parfaitement, surtout parce qu'il n'y a pas de collisions entre joueurs / PNJ (avec un faible décalage, vous ne remarquez vraiment rien, avec un décalage de 250+ ms, par exemple, vous remarquez la différence si vous pouvez voir les deux écrans (de deux joueurs) ) en même temps, mais ce n'est toujours pas vraiment notable sur «un écran»).
Je dirais donc: optez pour la création de serveurs (validation des positions + horodatages des joueurs et aussi pour l'IA au début, vous pouvez faire un système plus élaboré pour le NPC plus tard sans gros problèmes) + prédiction client.
ps. J'utilise une précision en millisecondes qui fonctionne parfaitement bien, sauf qu'un int signé ne tient que pendant environ 3 semaines avant de devoir redémarrer le serveur.
Vous pouvez également vouloir vérifier la prédiction de temps (c'est-à-dire essayer de se synchroniser aussi étroitement que possible avec le serveur).
la source