Bonjour,
Je code depuis un petit bout de temps maintenant un jeu en réseau (client serveur) en java en 2d (déplacement droite-gauche et saut, comme les premiers mario) et je galère depuis un moment sur la gestion des déplacements, toutes les solutions que j'ai trouvé impliquent des aberrations coté client..
Tout d'abord, j'utilise le protocole TCP avec un Selector pour transmettre mes données, et je n'ai pas envie de passer en UDP, car la création d'une couche de gestion des erreurs me prendrai trop de temps.
L'idée sur laquelle j'étais parti était de créer un classe State qui encapsulerais un temps, un vecteur position et un vecteur vitesse. Le joueur possède un State courant, à partir duquel je peux recalculer sa position à tout moment.
Lors d'un déplacement, un State est créé et le joueur coté client commence à se déplacer (client-side prédiction), au même moment, le client envoie la demande de déplacement au serveur qui accepte ou refuse le déplacement et renvoie le nouveau State au client, qui doit ensuite recalculer sa position.
Dans la théorie cela semble pas mal, mais en pratique, le calcul du déplacement est totalement faussé car je n'arrive pas à avoir une mesure de temps absolue entre le serveur et le client et les laggs ne viennent pas arranger la donne... J'ai lu l'article http://gafferongames.com/game-physic...orked-physics/ mais l'auteur ne semble pas tenir compte de ces différences de temps, de plus il utilise le protocole UDP et envoie le State plusieurs fois par seconde alors que je ne veux envoyer ce State seulement lors du changement de direction, ou du saut.
Je suis donc ouvert à toute proposition, toute idée, tout lien, ou tout bout de code pouvant m'aider à gérer ça...
Merci d'avance.
Partager