[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
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.