IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Comment organiser les appels réseau pour transmettre des mouvements fluides ?


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut Comment organiser les appels réseau pour transmettre des mouvements fluides ?
    Bien le bonjour,

    Mon problème du jour concerne l'envoi de messages sur le réseau.

    Comment coordonner des mouvements de personnages pour que chaque chaque joueur puisse avoir un visuel fluide ? Quel genre de message devrais-je envoyer ? A quelle fréquence ? A qui ?

    Sachant qu'évidemment je n'ai pas 20 FPS réseau.

    Je ne cherche pas une solution clef en main mais plutôt des idées, des réflexions, des explications de méthodes déjà employées ...

    Pour l'instant je pars sur l'idée d'envoyer des ordres de mouvements et chaque joueur interprêtera ces ordres de la même manière en attendant un éventuel contre-ordre. Mais avez-vous d'autres idées plus pertinentes ?


  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Dans ce genre de cas; j'opterais pour une gestion de l'animation coté client et une resynchro lancée par le server regulierement. Normalement, la difference doit aps etre tres grande.

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Merci pour ta réponse.

    Mais je n'ai pas forcément une archi client/serveur classique.
    On va résonner sur N joueurs. L'un d'eux contrôle un personnage et le fait bouger ; les autres doivent pouvoir visualiser son mouvement de manière fluide.

    Si les joueurs demandent régulièrement les coordonnées du personnage, on n'aura de loin pas 20 FPS réseau et donc pas 20 FPS graphique. Il faut forcément interpoler un peu.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Ok dans ce cas, disons que celui qui fait bouger un perso envoie les ordre qu'il donne pour faire bouger son perso sur le resau.

    Sur chaque client, un "joueur reseau" repete les meme actions. de temps en temps, celui qui fait bouger sont perso envoie aussi la position a laquelle il est arrivé, afin de corriger les decaclages du au ping/aux arrondis de calcul/au framerate de chaque machine/etc . . .

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par khayyam90 Voir le message
    Comment coordonner des mouvements de personnages pour que chaque chaque joueur puisse avoir un visuel fluide ? Quel genre de message devrais-je envoyer ? A quelle fréquence ? A qui ?

    Sachant qu'évidemment je n'ai pas 20 FPS réseau.
    Je suis confronté à ce problème et je me suis déjà posé la question.
    On parle de resynchro je ne vois pas trop autrement.
    Elle pourrait se faire selon un "timestamp" autrement dit un identifiant horaire reçu.
    Par exemple pour un client donné on interroge le serveur ou les autre pairs si le "timestamp" reçu est identique au timestamp courant alors on ne fait rien..

    Sinon on peut peut-être gérer cela avec une pile d'action...

    Ou bien alors gérer du multithreading ( la programmation réseau dans un jeu vidéo c'est là une utilisation pertinente du multithreading ).
    Par exemple un perso et son comportement c'est un thread qu'on doit resynchroniser à chaque réception des données réseau.

    En tout cas si tu trouves une solution cela serait bien de l'exposer à tout le monde

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    en fait, ce qui est fait généralement, c'est d'envoyer la position du perso, et ses info d'evolution courante (direction, vitesse...) comme ca, chaque client peut continuer à faire "évoluer" l'autre en local, jusqu'au prochain message qui lui donnera les nouvelles info.
    dans le cas général, ca marche pas trop mal. Par contre, si tu a un mec qui s'amuse à avoir une trajectoire completement aléatoire, la, forcement, ca donnera un resultat etrange (perso qui se téléporte...)
    après, tout dépend du potentiel réactif de tes entités...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  7. #7
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Merci bien pour vos réponses.

    L'idée de diffuser une position ainsi que le vecteur vitesse de déplacement me semble intéressante. Il faudra essayer de donner un max d'infos pour que le client puisse interpoler le mouvement tout seul avec un minimum de messages de synchro (peut-être 1 ou 2 par seconde, voire moins). Et oui, je suis dans un cas où beaucoup de personnages se déplacent en même temps donc beaucoup de messages à envoyer ou alors des gros messages.

  8. #8
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    si c'est pour un RTS comme je le soupconne subtilement, tu gagnerais surement à avoir un pathfinder deterministe et à juste envoyer la position et la destination, le chemin sera calculé par le client, en plus, tu n'a à envoyer de nouveau message qu'en cas de changement d'action courante d'une unité, ce qui reduit fortement l'envoie de ces info (et une petite synchro de temps en temps bien entendu ;-)
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  9. #9
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Citation Envoyé par bafman Voir le message
    si c'est pour un RTS comme je le soupconne subtilement
    Je ne vois pas du tout de quoi tu veux parler.

    Citation Envoyé par bafman
    tu gagnerais surement à avoir un pathfinder deterministe
    encore une idée intéressante, qui a l'avantage d'être plus légère en échanges réseau.

  10. #10
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    le probleme du pathfinder déterministe, c'est que c'est très facile à faire sur une carte à base de cases, beaucoup moins pour une carte sans case.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  11. #11
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    tout à fait d'accord, mais ça sort du cadre de l'organisation des appels réseau. Ca devient une histoire de pathfinder.

  12. #12
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par khayyam90 Voir le message
    Je ne vois pas du tout de quoi tu veux parler.
    tiens tiens du projet commun en l'air ??

    dans le cas général, ca marche pas trop mal. Par contre, si tu a un mec qui s'amuse à avoir une trajectoire completement aléatoire, la, forcement, ca donnera un resultat etrange (perso qui se téléporte...)
    j'ai pensé à ce problème là aussi.

    Sinon une autre solution : que l'un des clients devienne serveur obligatoirement....
    Par exemple le premier qui ouvre une session et qui interroge les autres devient serveur ,mouline toutes les données et les renvoie aux "esclaves"

  13. #13
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Sinon une autre solution : que l'un des clients devienne serveur obligatoirement....
    Par exemple le premier qui ouvre une session et qui interroge les autres devient serveur ,mouline toutes les données et les renvoie aux "esclaves"
    même sur quake 3 qui est purement client/serveur, il y a de la prediction chez le client, car même avec un serveur qui envoie des données comme un fou, il y a toujours désynchro avec la vitesst d'affichage, il faut donc pouvoir bouger le perso du coté client.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  14. #14
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    La prédiction chez le client est le seul moyen de t'en sortir, par contre il y aura toujours des problèmes ou les personnages se "téléporteront" d'un endroit à un autre du fait même du système d'interpolation et de vitesse de mise à jour.

    Il y a eu d'autres personnes qui ont posé des questions sur la synchronisation Client/Serveur. (Je n'ai pas fait une recherche exhaustive, il doit sûrement y avoir d'autres posts associés qui peuvent être intéressant et t'intéresser.)

    Fluidité echange Client/Serveur

    Gestion "clavier/envoi vers le serveur" en multijoueur

    Client en C++ / Serveur en: hum..?

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/12/2021, 17h13
  2. Réponses: 6
    Dernier message: 13/01/2015, 16h42
  3. comment organiser les noms des clés de dictionnaire
    Par micamused dans le forum Général Python
    Réponses: 3
    Dernier message: 27/08/2014, 21h52
  4. Réponses: 2
    Dernier message: 21/06/2011, 20h27
  5. Réponses: 10
    Dernier message: 23/06/2007, 16h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo