[UDP] temps-réel dans un jeu - stratégie à adopter ?
docteur_re
Messages postés13Date d'inscriptionvendredi 17 décembre 2004StatutMembreDernière intervention 7 avril 2006
-
12 mars 2006 à 11:23
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 2008
-
13 mars 2006 à 14:25
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
A voir également:
[UDP] temps-réel dans un jeu - stratégie à adopter ?
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 13 mars 2006 à 13:33
Salut,
Beaucoup de questions la dedans !
Je ne suis pas du tout un expert dans ce domaine, mais pour ce qui est des données resultant de l'action d'un joueur (et la reponse du serveur), j'aurais plutot pensé les envoyer en via TCP plutot qu'UDP. Parce que ca peut-etre assez genant si le serveur ne recoit pas les commandes du joueur (et reciproquement). J'utiliserais UDP plutot pour envoyer (depuis le serveur) les données resultant des autres joueurs (je veux dire par la que c'est moins grave s'il y a une perte de paquet par rapport a la position a l'ecran des autres joueurs, cela sera corrigé avec les paquets suivants). Le principal c'est que le serveur ait lui les positions exactes.
Du coup, en utilisant TCP, tu garantis que ton paquet est arrivé, et ton choix 1) est faisable.
Je ne pense pas que la 2) soit une bonne idée. Et la 3), revient en fait implicitement a la un (du fait du fonctionnement du protocole TCP).
Par contre, si ca se trouve, je me trompe a 100% (je t'expose juste l'idée que je m'en fais)
Es-tu allé voir ce qu'ils disaient a propos de ce sujet sur les sites spécialisés developpement de jeu (style gamedev)
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 13 mars 2006 à 14:25
Oki, donc en fait tu avais eu ta réponse ;)
Je prends note des conseils que tu as eu sur l'autre article. J'avais pas envisagé la lourdeur de TCP dans ce sens. Donc en effet, UDP a l'air conseillé dans ton cas.