Jeux Libres
       
           

» Les Forums » Aide à propos de la création de jeux vidéo » Connexion reseau


Aller à la page : 1.

Connexion reseau
Tazadar



Grade : Nouveau venu
Inscrit le: 18 Oct 2011, 13:26
Ecrit le: 18 Oct 2011, 13:34             Message non corrigé

Salut a tous,

J'ai regarde votre tutorial qui m'a l'air fort complet.
Toutefois j'ai ete decu de ne pas trouver la partie sur la connection reseau.

Je m'explique, je suis actuellement en train de faire un jeu, j'ai etablie la connection entre le client et le serveur en UDP pour des questions de ping.
Toutefois, j'aurais aime trouver des tutos pour pouvoir savoir comment gerer le delai entre le client et le serveur (le lag en gros).
Sachant qu'il s'agit d'un FPS, je ne peux pas me permettre d'avoir trop de decallage entre les differents clients. Je n'ai pas envie de voirs les autres joueurs sacader dans leur mouvement par exemple.
Je suis donc tres interesse par des tutos sur la gestion du ping, la gestion des paquets perdus etc.

Je vous remercie.

Taz.
  Profil
David



Grade : Maître
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 09 Nov 2011, 20:31             Message non corrigé

Pardon, je n'avais pas vu ton message. Je vais y répondre maintenant. Voici comment je m'y suis pris :

Synchronisation des horloges



Au tout début, je synchronise l?horloge des clients sur celle du serveur, suivant l'algorithme donné dans l'article traitant de la simultanéité à distance.

  Pour se synchroniser, le client demande au serveur de lui envoyer l'heure immédiatement. Lorsque le client reçoit l'heure du serveur, un certain temps s'est écoulé entre temps. L'heure que vient de recevoir le client représente en réalité l'heure qu'il était lorsque le serveur a envoyé le message.

Pour en déduire l'heure actuelle, le client doit ajouter, à l'heure reçu, le temps de latence qu'a mis le message pour lui parvenir.

Prenons un exemple :
- A 21h et 10 secondes (heure local) le client envoi une demande au serveur.
- A 21h et 18 secondes (heure local) le client reçoit la réponse du serveur.
- Le client en déduit que le ping est de 8 secondes. Il estime donc la latence à 4 secondes.
- Le message du serveur contient l'heure "réelle". Il indique qu'il était 21h et 42 secondes (heure de l'envoi de la réponse). Ce qui signifie qu'à 21h et 14 secondes (heure local) il était en réalité 21h et 42 secondes. On en déduit un retard de 28 secondes. Pour synchroniser notre horloge, on ajoute alors 28 secondes à notre horloge locale pour avoir une horloge synchronisée sur celle du serveur.
     


Prévisions des évènements



La seule façon de produire un évènement simultanément chez chacun des clients est de les prévenir que l?évènement se produira à telle heure. Bien entendu, le message qui préviendra l'heure de l'évènement devra arriver à temps chez chacun des clients. Pour cela, je laisse un temps d'acheminement de 150 ms.

Lorsqu'un joueur veux tirer, il envois la demande au serveur. Lorsque le serveur reçois cette demande, il l?envoie immédiatement à tout ses clients. Ce message, envoyé par le serveur, contient l'heure à laquelle l?évènement se produira réellement. C'est à dire, à heureActuelle + 150 ms. Le serveur ajoute cet évènement dans sa liste des évènements à jouer. A la réception du message, les clients en font autant.

Lorsque l'heure de l'évènement arrive, chacun joue l'évènement de son côté, au même instant.

Réactivité



Dans le cas d'une demande de déplacement de la part d'un client, il se produit la même chose. Seulement, pour le joueur qui fait la demande, il est très désagréable pour lui d'attendre l'envoi de sa demande auquel s'ajoute les 150 ms.

Pour éviter ce côté désagréable qui donne l'impression que le jeu n'est pas réactif, le joueur qui fait la demande de déplacement estime l'heure à laquelle commencera son déplacement, et fait, par dessus ça, une prévision d'encore 100 ms. Il peut donc déjà calculer assez précisément où il se situera 250 ms après l'envoi du message du serveur.

Sachant où il est actuellement, ainsi que le lieu où il sera ensuite, le client en déduit, par interpolation linéaire, où il se situera dans 30 ms, dans 60 ms... Il commence alors immédiatement sa course, mais à allure plus lente. A la réception du message du serveur, la course du joueur reprend son fonctionnement normal.

Prévision de la course des joueurs



Périodiquement, le serveur envoi 500 ms de prévisions pour chacun des personnages. Lorsque l'action du personnage est modifié, la liste des positions des joueurs et rectifié, généralement avant que la modification de déplacement prenne effet. Lors de l'affichage, la position du joueur est calculé par interpolation à partir des positions clés.

Pertes de message



La gestion des pertes de messages et géré grâce à un compteur. A chaque nouveau message pour chaque type d'action, un numéro est associé. Le message est envoyé périodiquement, tant qu'il n'est pas accusé. De l'autre côté, le message n'est pris en compte, que s'il est plus ressent.

J'espère que mes explications t'apporteront de l'aide.

Tout sera expliqué bien plus clairement dans le tutoriel.

________
Apprenez à créer votre propre FPS en C++ avec OpenGL. C'est pas dur ! :-)
  Profil
 


Aller à la page : 1.


Hébergeur du site : David
Version PHP : 5.4.45-0+deb7u2
Uptime : 55 jours 19 heures 51 minutes
Espace libre : 1512 Mo
Dernière sauvegarde : 30/03/2020
Taille de la sauvegarde : 1113 Mo


5889072 pages ont été consultées sur le site !
Dont 2802 pages pendant les 24 dernières heures.

Page générée en 1.023 secondes


Nos sites préférés
- Création d'un jeu de plateforme de A à Z avec SDL
- Zelda ROTH : Jeux amateurs sur le thème de Zelda
- Zeste de Savoir : la connaissance pour tous et sans pépins
- YunoHost : s'héberger soi-même en toute simplicité
- Site de Fvirtman : recueil de projets et de codes en C et C++
- Par ici la sortie : le site des idées de sorties


  © 2005-2020 linor.fr - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.