|
Pages: [1]
|
 |
|
Auteur
|
Sujet: Meilleure façon de déplacer un personnage (Lu 206 fois)
|
loupstigrou
Newbie

Messages: 26
|
Bonsoir !
Je suis confronté à un probleme, jusque là pour déplacer les autres joueurs sur le client 1, je transférais des données du type "deplacement=posX=posY=DirectionDuPersonnage" et le client se contentait de replacer le personnage à la bonne place. Mais ce système est vraiment primaire, bouffant en ressources et "moche", car il y a des "sauts" du personnage à chaque déplacement.
Je voulais savoir, vous qui avez touché à blablaland et autre, comment vous avez corrigé ce probleme. J'ai lu qu'on pouvait faire des actions du genre quand on appuie sur la touche "flèche droite", ça envoit au serveur "deplacement=droite", le personnage se déplacera donc à droite sur tous les clients, jusqu'à ce qu'on reçoive "stop" quand le joueur relache la touche.
Mon jeu est avec des déplacements du style Super Mario, avec des sauts et des chutes possibles dans le decors, des glissements du personnage sur du verglas et autre.. Comment faire, quelle solution serait la plus appropriée ?
Si vous pouviez m'aiguiller.
Merci d'avance !
|
|
|
|
|
Journalisée
|
|
|
|
|
seal3
|
Salut ! Il ya deja des post pour ce genre de chose 
|
|
|
|
|
Journalisée
|
|
|
|
|
seal3
|
Je complete :
Oui il faut envoyer un message d'etat, contenant les touches enfoncées et la position actuelle. Lorsque l'etat change opn renvoie la position avec le nouvel etat du clavier.
Par contre cela n'empechera pas les saut etant donné que certains messages metront 30 ms pour passer et d'autres 200ms voir plus si ya un lag. C'est la que la latence entre en jeu, il faut sunchronizer tout le monde sur la même heure et pour chaque message dire qu'ils doivent etre executés maintenant + un temps de latence, par exemple 100 ms. Le client qui recoit ce message ne l'interpretera que X ms plus tard en fonction du temps qu'il aura mis à le recevoir.
|
|
|
|
|
Journalisée
|
|
|
|
loupstigrou
Newbie

Messages: 26
|
Ok ! J'ai pas trop trouvé de topic sur le net parlant du lag/latence, y'a-t-il un nom précit pour ça, car je comprend trop comment faire ?
Sinon, quelle est la meilleure méthode : on a un avatar dont la couleur est changée dynamiquement par un colorTransform. Sauf que quand le personnage va dans une direction, ce n'est pas le même dessin, en gros le clip va passer à l'image clée 2 par exemple quand il est va à droite ou à l'image 3 quand il va à gauche. Mais pour le colorTransform, il faut le refaire à chaque changement d'image dans le clip ?
Sinon, est-ce possible de faire un removeChild et addChild à chaque fois que le personnage change de sens ? Mais ça risque d'être galère de recalculer la position, la couleur, les caractéristiques à chaque changement de sens. Et il ne risque pas d'y avoir des "blancs" de 1 secondes entre le removechild et l'addchild ??
Je ne sais pas du tout comment faire :/
|
|
|
|
|
Journalisée
|
|
|
|
loupstigrou
Newbie

Messages: 26
|
Finalement j'ai trouvé pour les couleurs ^^
Par contre, je ne vois toujours pas comment prendre en compte la latence. As-tu un tuto sous la main ou peut tu m'expliquer en gros comment je peux coder un truc de ce genre ? :s
Merci d'avance ^^
|
|
|
|
|
Journalisée
|
|
|
|
|
seal3
|
Salut !
Tu as plusieurs moyen de le faire, déja synchroniser l'heure exacte en milliseconde entre les client grace à l'heure du serveur. Un client envoie un event en indiquant à quelle heure il l'a envoyé. Le serveur retransmet aux autres clients, les clients qui recoivent, regarde l'heure d'envoie indiqué dans le message et comparent avec l'heure actuelle. Si sa ta latence est de par exemple 100 ms. Alors si le message est plus vieux de 100ms on le traite directement, sinon on le met en mémoire et on attend la frame suivante pour voir si les 100 ms sont atteint.
Pour synchroniser, perso je fais en sorte que toutes les minutes le client envoie un message particulier au serveur, le serveur repond en indiquant l'heure actuelle en millisecondes depuis janvier 1970 (heure universelle retournée par tous les systemes codés sur 8 octets), le client qui recoit ce message regarde en combien de temps le serveur à répondu, il peut donc estimer son ping et en tenir compte en divisant cette valeur par deux et la retirant de l'heure que le serveur lui donne. Je fais cette opération 5 fois de suite et je prend la difference d'heure entre l'ordi du client et celle du serveur la plus petite.
|
|
|
|
|
Journalisée
|
|
|
|
|
|
Pages: [1]
|
|
|
 |