Socket + Synchronisation

Résolu
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 10 août 2009 à 06:40
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 11 août 2009 à 15:09
Bonjour à tous,

J'ai une question technique concernant les jeux réalisés en réseaux :

Si l'on imagine un jeux en réseau de ping pong avec deux raquettes et une balle, on a deux ordinateurs représentant chacun un joueur et échangeant des informations via un serveur se trouvant sur internet et qui retransmet les informations aux deux ordinateurs.

Pour le mouvement des raquettes cela ne pose pas de problème :

[i]- le joueur 1 presse le flèche haut

- l'information est envoyé au serveur

- le serveur retransmet l'info au joueur 2/i



Mais concernant le mouvement de la balle comment garantir que les deux ordinateurs verront la même chose ?

Est-ce au serveur de calculer les mouvements de la balle et retransmettre les informations ?

Comment garantir une parfaite synchronisation dans les jeux en réseaux ?

Par avance, merci.

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 août 2009 à 09:59
Salut,

Je pense que tout comme l'information de la raquette, l'information de la balle doit être envoyée par le client (sous forme de direction et force), et le serveur ne fait que transmettre l'information au deuxième client qui se chargera de calculer la position de la balle, sinon, si tu as un message à chaque nouvelle position de la balle, tu va consommer énormément de bande passante pour rien !
______________________________________
DarK Sidious
3
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
11 août 2009 à 14:01
Je te conseille également d'envoyer dans ton message la position de la balle le "TEMPS" !
Ce message devra être transmis à chaque changement de direction de la balle, ou périodiquement.


Imaginons qu'un packet se traine dans le réseau pour 500ms (ça peut arriver), voire que 2 packets arrivent dans un sens inverse (Cas fréquent en UDP)
Il faut garantir pour un "moteur physique" qui va faire des intégrations, que le bruit généré par l'aléa du réseau est corrigible.

Je te conseille de faire un packet ballEvent du type

class ballEvent ... {
int noBallEvent;
Point ballP;
int vX;
int vY;
}

le serveur va calculer les changements de vitesse , et la position.
Lorsque la vitesse change, il emmet aux clients le packet ballEvent.

Ce packet permet aux clients de savoir :
* la position actuelle de la balle
* les nouvelles vitesses

Si on perd un packet : pas grave, vu que le nouveau va nous renseigner sur l'état de la balle (Au bout d'un temps déterminé par le lag)

Si un packet arrive dans le mauvais ordre:
tu l'ignore: (on peut le savoir si jamais on recoit un packet aveec noBallEvent plus petit qu'un précédent)

Bonne chance !

; I'm just keeping the hopeless cross to increase the meaninglessness
3
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
10 août 2009 à 16:57
Merci pour la réponse.
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
11 août 2009 à 15:09
Merci beaucoup pour cette réponse si complète
0
Rejoignez-nous