J'implémente un clone d'astéroïdes multijoueur pour en savoir plus sur l'architecture réseau client / serveur dans les jeux. J'ai passé du temps à lire les publications de GafferOnGames et Valve sur leur technologie client / serveur. J'ai des problèmes avec deux concepts.
Actuellement, j'ai un serveur de jeu faisant autorité qui simule la physique avec box2d et envoie l'état du monde aux clients environ 20 fois par seconde. Chaque client garde une trace des derniers instantanés qu'il a reçus et lerps entre deux états pour lisser le mouvement des sprites. Mais ce n'est pas si simple. Il peut être lisse pendant un certain temps, puis saccadé un peu, puis revenir à lisse, etc. J'ai essayé à la fois TCP et UDP, les deux sont à peu près les mêmes. Une idée de mon problème? (Remarque: j'ai d'abord implémenté cela pour le mode solo, et le mouvement des sprites est parfaitement fluide à 60 images par seconde lors de la mise à jour du monde physique seulement 20 fois par seconde).
Afin de résoudre le premier problème, j'ai pensé que le client devrait peut-être également exécuter une simulation box2d et simplement mettre à jour les positions de ses sprites pour correspondre aux instantanés du serveur lorsqu'ils ne correspondent pas. Je pensais que cela pourrait être plus fluide car mon implémentation en mode solo est fluide. Est-ce une bonne idée?
Même si cela ne résout pas le problème ci-dessus, est-ce nécessaire pour la prédiction côté client? Par exemple, si un joueur tente de déplacer son vaisseau, comment saura-t-il s'il frappe un astéroïde, un mur ou un vaisseau ennemi sans simulation physique? Il semble que leur vaisseau semble traverser l'objet avec lequel il devrait entrer en collision avant de recevoir un instantané du serveur indiquant qu'ils ont heurté l'objet.
Merci!