Bonsoir,
Je me demandais sous quelle forme envoyer les messages de déplacements dans un jeu vidéo en réseau, avec un réseau de type echo. Pour fixer les choses:
* Chaque client peut déplacer son personnage. Cette action envoie un message au serveur.
* Le serveur fonctionne uniquement par écho. Il va renvoyer ce message à tous les clients (dans l'ordre recu).
* Lorsqu'un client recoit l'echo, il déplace effectivement l'objet (le personnage correspondant).
Je me mets a priori dans le cas de coordonnées continues du plan. coordonnées= paire de float. Je reste quand même intéressé de savoir ce qu'il se passe pour des coordonnées entières sur un damier.
J'imagine deux types de messages:
1/ basés sur la position: le client envoie au serveur la position à laquelle il veut se rendre (éventuellement découpée par le client en plusieurs déplacements élémentaires).
2/ basés sur les vitesse: le client envoie au serveur un vecteur de vitesse (voir d'accélérations).
De ce que je saisis pour l'instant:
* Le protocole 2/ est plus lourd. Il faut envoyer soit les vitesses en permanence ; soit un message au début du mouvement, et un à la fin (vitesse nulle).
* Le protocole 1/ souffre d'un problème d'oscillation. Si une nouvelle destination est envoyée par le client avant l'écho du 1 er déplacement, elle sera calculée à partir de la mauvaise position.
Cela se règle en empechant le client de lancer un nouveau message avant l'écho, car le client sait quel message attendre (c'est lui qui l'envoie) Toutefois cela se corse beaucoup si certains effets de jeu autorisent le déplacement des objets adverses. Dans ce cas, comment préciser à un autre client distant quel écho attendre (ou ne pas prendre en compte), et comment lui préciser ca assez vite ?
Un autre intérêt (annexe pour le problème posé) du protocole 1/ est qu'on n'est pas obligé de reparcourir la liste des events pour prendre le jeu en cours, on a les positions directement.
Lequel des deux protocoles vous semble préférable ?
Est-ce que ce genre de problème est adressé par un pattern quelconque ?
Merci pour votre attention
Partager