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

 

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    décembre 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2004
    Messages : 1
    Points : 1
    Points
    1

    Par défaut [UDP] temps-réel dans un jeu - stratégie à adopter ?

    bonjour a tous,

    imaginons le cas de figure suivant :

    j'ai 2 programmes, client et serveur.
    - le premier écoute les evenements d'un joystick et envoie les coordonées des axes par UDP au second
    - le second les reçoit et les utilise.

    l'udp est utilisé afin de garantir une transmission temps réèl (comme dans les jeux en réseau style FPS)

    mon seul probème est de savoir quelle stratégie adopter pour envoyer ces paquets. Voici celles que j'ai envisagées :

    1 - Les envoyer simplement avec un sento() à la suite les unes des autres, à chaque réception d'un evenement joystick. Mais cela ne permet pas de garantir que la dernière coordonnée est arrivée.

    2 - Envoyer en permanence avec un sleep de 5 millisecondes les coordonnées joystick. Un peu bourrin et surtout pourquoi 5 millisecondes et pas un autre nombre, cela dépendrait de la qualité du réseau.

    3 - Envoyer les coordonées avec un identificateur unique, puis attendre une réponse avec ce meme identificateur pour en renvoyer un autre. Oui mais si la réponse ne reviens jamais, le programme se bloque. On peut alors penser à un timeout à partir duquel les coordonnées sont réémise. Et encore une fois, quelle valeur pour ce timeout ?

    voilà, j'ai pas d'autres idées pour le moment. En fait jaimerais bien m'inspirer des jeux existant genre counter-strike, ou ceux open-source pour aller voir comment ils procèdent.
    Si certain ont déjà eu l'occasion de travailler sur le problème....

    Merci
    bye

  2. #2
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : octobre 2003
    Messages : 672
    Points : 775
    Points
    775

    Par défaut Re: [UDP] temps-réel dans un jeu - stratégie à adopter ?

    Citation Envoyé par docteur_re
    1 - Les envoyer simplement avec un sento() à la suite les unes des autres, à chaque réception d'un evenement joystick. Mais cela ne permet pas de garantir que la dernière coordonnée est arrivée.
    Est ce que la garantie d'arrivée des paquet est importante ? Est ce que le client est capable de positionner "l'emmetteur" même si il n'a pas la position précédente. Si oui, tu t'en "fout" de la garantie de livraison(si faible perte )

    Citation Envoyé par docteur_re
    2 - Envoyer en permanence avec un sleep de 5 millisecondes les coordonnées joystick. Un peu bourrin et surtout pourquoi 5 millisecondes et pas un autre nombre, cela dépendrait de la qualité du réseau.
    je percute pas trop ce que tu veux faire
    Citation Envoyé par docteur_re
    3 - Envoyer les coordonées avec un identificateur unique, puis attendre une réponse avec ce meme identificateur pour en renvoyer un autre. Oui mais si la réponse ne reviens jamais, le programme se bloque. On peut alors penser à un timeout à partir duquel les coordonnées sont réémise. Et encore une fois, quelle valeur pour ce timeout ?
    ca s'appelle du TCP (+/-). à toi de répondre à la question du 1) : est ce que tu as BESOIN d'être sur que tes paquets sont bien arrivés ou est il plus important que le transfert soit le plus rapide possible quitte à avoir de la perte au passage.

    ++ et bon courage, c est pas facile ces pb de temps réel.
    Two beer or not two beer. (Shakesbeer)
    Question technique par MP => poubelle!

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    juillet 2005
    Messages
    9 809
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : juillet 2005
    Messages : 9 809
    Points : 21 332
    Points
    21 332

    Par défaut

    Je pense que la première stratégie est la meilleure, mais ce n'est que mon avis.

  4. #4
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2002
    Messages : 498
    Points : 651
    Points
    651

    Par défaut

    Dans la partie 2, je pense qu'il veut faire du polling. Attendre d'avoir recu un certain nombre d'evenement / un certain temps avant d'envoyer toutes ces informations en une seule fois. A mon avis, une solution peu pertinente pour un "temps reel".

    Comme dit precedemment, le probleme de 1 est qu'on n'est pas sur que les evenements arrivent et / ou qu'ils arrivent dans l'ordre ( ce qui peut-etre embetant ) On peut se retrouver "hors terrain" si les deplacements n'ont pas lieu dans le bonne ordre.

    La solution 3 ressemble a celle utilisé dans des jeux tel que q3. C'est je pense un bon compromis mais il faut une bonne implémentation ( donc difficile ).

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2006
    Messages : 150
    Points : 111
    Points
    111

    Par défaut

    Au passage je crois qu'une partie du netcode de quake 3 est open source.

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2005
    Messages : 5 121
    Points : 11 740
    Points
    11 740

    Par défaut

    C'est un faux problème. Passe en TCP et regarde si le réseau n'arrive pas à le supporter. Généralement, cela marchera correctement et tu auras plus de temps pour programmer ton jeu...

    Si c'est bien programmer, le jeu ne saura pas ce qui se passe dans le module Réseau donc le passage TCP -> UDP pourra se faire sans que cela change quelque chose dans le reste du programme...

    Mais sinon, je pencherais aussi pour le 1
    Jc

Discussions similaires

  1. Affichage de l'heure en temps réel dans une interface
    Par T-MAT dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 26/12/2008, 19h08
  2. Déterminer le classement en temps réél dans un jeu de course
    Par j0o0 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 19/09/2008, 20h16
  3. Réponses: 2
    Dernier message: 21/03/2007, 14h36
  4. insertion en temps réel dans une combolist
    Par new_wave dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 05/09/2006, 17h55
  5. Réponses: 4
    Dernier message: 16/06/2006, 03h29

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