Hello,
Je continue mon jeu en réseau avec la librairie SDL et SDL_Net.
J'ai fait évolué la gestion de l'envoie des données entre le client et le serveur :
Au tout debut, le client envoyait l'etat des touches sur lesquels ils appuyait toutes les X millisecondes, au serveur, qui calculait la nouvelle position et renvoyait a tous les clients cette position. cependant il y avait un lag, je pense que trop de données etaient envoyées.
J'ai amélioré ce systeme : le client envoie l'etat des touches qui changent uniquement(par exemple si j'appuie sur gauche et que je maintiens, je n'envoie que le paquet correspondant au changement, au lieu d'envoyer en continue l'information "gauche"). A partir de ce moment, le serveur ET le client calcule les nouvelles positions, jusqu'a qu'un autre changement de touche interviennent, la, le serveur envoie la position finale, et le client se cale dessus. En gros le client essai de prevoir la position du personnage sur la map, avant d'avoir confirmation du serveur (et pendant toute la periode ou j'appuie sur gauche et que je maintiens, aucune information n'est envoyée !)
Le probleme etant que, du coté du serveur comme du coté client, il faut une frequence de mise a jour de la position. Les 2 se font en meme temps, mais la machine sur laquelle etant le client, et celle sur laquelle etant le serveur, n'etant pas forcement de la meme puissance, il y a parfois de forte differences entre la position estimée par le client, et la position reelle envoyée par le serveur, surtout lorsqu'il y a plusieurs clients connecté au serveur (celui ci doit alors effectuer + de calcul ce qui diminue la frequence).
Je cherche donc un moyen de synchroniser tout ca pour avoir la meme frequence coté client que coté serveur.
Quelqu'un aurait t'il une idée?
PS : j'utilise encore le TCP, donc il n'y a a priori pas de perte de paquets en route !
Partager