fork de la discussion sur la game loop multi threadée
il y a de nombreuses possibilités mais ce que disait deadalnix :
il stocke les positions des objets dans des tableaux, 8, espacés de 10ms
théoriquement il peut donc remonter le temps de 70ms (de 0ms a 70ms)
ensuite il y a la difficulté de savoir corriger
il y a de nombreux "temps" différent; pour ne pas se tromper, voila en gros comment ca marche
- il y a le présent du client
- il y a le présent du serveur; toujours en décalage avec le présent du client (lag)
- le futur du client (qui est le présent du serveur)
- le passé du serveur (qui est le présent du client)
celui qui a raison doit toujours être le serveur pour éviter le piratage, et aussi pour que tous les gens connectés partagent la même représentation du monde.
On a donc : le présent du serveur qui domine, mais le présent du client qui est ce que le joueur voit (et il ne faut pas attendre entre le moment ou tu appuies sur la touche et le moment ou tu vois ce qui se passe)
c'est très important que lorsque le client voit quelque chose, il puisse lui tirer dessus dans un FPS, sans compenser lui même le lag.
pour cela, le client utilise en général la "prédiction" et la "correction". la prédiction consiste a dire que l'on est en avance par rapport au serveur, mais que l'on peut déjà calculer avec pas mal de précision la position des ennemis puisque ceux-ci ont des vitesses et positions connues.
Mais qu'en faisant ca on est en "avance" par rapport au temps serveur, et que donc on prédit peut être quelque chose qui va changer
alors donc, si l'on suit bien, le client doit toujours être au top du top de la réactivité, mais le serveur lagge un peu derriere. Donc le client prédit ce qui se passe, puis lorsque le serveur répond, le client corrige ce qui a été mal prédit.
De plus, lorsque je tire, j'envoie au serveur mon ordre de tir (puis je prédis le tir sur le client)
le serveur va recevoir l'ordre de tir mais sait que cela c'est produit en fait dans le passé, car le temps que transite l'information toussa toussa
le serveur va donc recevoir l'ordre de tir et regarder dans son passé ce qui se passait a ce moment, va etre capable de dire si le joueur est effectivement touché ou pas et va renvoyé le statut du tir, qui sera recu plus tard par le client et qui ALORS affichera l'information que le tir a touché ou pas.
Le serveur peut (mais pas doit) appliquer une correction au passé mais c'est costaud; en cas de lag, on risque plutot de voir un delai entre le fait qu'un joueur est touché ou pas, c'est a dire que tu feras trois pas vivant avant de savoir que l'on t'a tué.
Le serveur a donc la notion de passé
le client en général ne connait pas le passé, il prédit le futur de manière a l'afficher avant qu'il n'arrive.
(C'est seulement un des designs possibles)
Partager