cid7777777
Messages postés4Date d'inscriptionmercredi 1 février 2006StatutMembreDernière intervention23 août 2007
-
10 juil. 2007 à 01:14
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013
-
19 juil. 2007 à 17:35
bonjour,
jessaye de faire un jeu qui peu se jouera 2 en reseau local.
je ne connais absolument rien en reso, mais en fouillant sur le net, jai trouver en gros comment faire et jessaye de mettre la chose sur pied en faisant des test.
le probleme c'est que la methode que jutilise ralenti grandement le jeu, il parait quil faut que j'utilise un thread mais je ne sais pas comment faire.
pour linstant, j'ai un programe serveur, qui envoi un caractere a chaque tour, a la fontion client de mon jeu
comment modifier les code pour que ça ne ralentisse plus le jeu??
et aussi , comment transmettre autre chose que des caracteres??(comme un tablo de float par exemple)
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 10 juil. 2007 à 17:57
Salut il est fortement déconseillé d'envoyer 1 char par envoi. Si tu y tiens vraiment tu peux mais il faudrait utiliser setsockopt() pour optimiser l' algorithme de Naggle et là c'est de la programmation socket avancée que certains tutos décriront mieux que moi.
Pour le tableau de float, transformer les floats en chars et les séparer d'un caractère délimiteur.
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 11 juil. 2007 à 17:28
Je ne connais pas le mode de fonctionnement des socket donc je dit surement n'importe quoi mais.
Tu envoi juste un char de 1 octets si un tour dure 1/50s de seconde pour avoir un affichage de 50 images par seconde ca demande un debit de 50 o/s. Avec une connexion minimum de 12k/s en upload ca prend 0.004 s donc tu perd 0.004 s a envoyer tes données sur 1 s de jeu.
Je suis a 100/100 d'accord avec katsankat mais je trouve bizarre que ca te ralentisse.
C'est le client ou le serveur qui est ralenti ?
Le client lui par contre lit des char de 1ko/s soit 1000 fois plus.
cid7777777
Messages postés4Date d'inscriptionmercredi 1 février 2006StatutMembreDernière intervention23 août 2007 12 juil. 2007 à 00:27
c'est le client qui est ralenti . mon serveur nest qun programe qui envoi des donné en boucle, et le client, c'est mon jeu opengl, mais aprement, la commande recv met lontemp a sexecuter.
Je ne tien pa speialement a garder cetet methode, jessay juste de trouver une solution pr fair un jeu en reso , mais jy arrive pas ça menerve! Tout les code qu je trouve ne sont pa fait pour le temps réél. A si en fait jen ai trouver un... ET bien entendu comme dabe, le code est enorme, completement incompreensible et uniformement reparti sur 500 000 fichier different!
cid7777777
Messages postés4Date d'inscriptionmercredi 1 février 2006StatutMembreDernière intervention23 août 2007 12 juil. 2007 à 00:27
c'est le client qui est ralenti . mon serveur nest qun programe qui envoi des donné en boucle, et le client, c'est mon jeu opengl, mais aprement, la commande recv met lontemp a sexecuter.
Je ne tien pa speialement a garder cetet methode, jessay juste de trouver une solution pr fair un jeu en reso , mais jy arrive pas ça menerve! Tout les code qu je trouve ne sont pa fait pour le temps réél. A si en fait jen ai trouver un... ET bien entendu comme dabe, le code est enorme, completement incompreensible et uniformement reparti sur 500 000 fichier different!
JEN AI MAAARE! Ya pas une methode simple???????
Vous n’avez pas trouvé la réponse que vous recherchez ?
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 12 juil. 2007 à 09:08
Le problème n'est pas que recv() met longtemps à s'exécuter, mais qu'il est bloquant.
Il faut que tu choisisses un modèle d'I/O adapté à tes besoins. Avec un thread par exemple. A noter aussi qu'en UDP tu y gagnerais un peu en latence. Regardes comment sont faits les codes de jeu de morpion/bataille navale etc sur ce site en général ils ne font pas 500.000 lignes de code.
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 19 juil. 2007 à 17:35
Il existe aussi des socket non bloquant, les socket asynchrone, va voir sur http://www.progzone.free.fr/reseau/socket/sockasync.html (c'est mon premier resultat sur google, me suis pas prit la tete) il te deconseille meme les threads.
C'est quoi comme jeu ?
Moi je te conseille de rester avec les socket bloquant, comme ca tu n'auras pas besoin de synchroniser ton jeu.
Il n'y a pas besoin de faire passer TOUTES les information aux clients, dans la plupart des jeux par exemple pour le deplacement d'un personnage il envoi une position a t=0s et une autre a t=1s entre les deux ils utlilisent des algorithmes ou l'inverse des interpolation (j'ai pas le nom). Ce systeme passe inapercu dans des wargames mais c'est tres flagrant dans les jeux de tir (pour bf2 j'ai meme lu que le serveur "anticiperait" le deplacement de ta mire quand tu te deplace)