Client-side prediction - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Client-side prediction (/showthread.php?tid=6238) Pages :
1
2
|
Client-side prediction - Maks - 04-07-2012 Je voudrais vous faire part d'un petit compte rendu de mes recherches récentes sur l'architecture client-serveur d'un jeu en ligne. La façon la plus commune de procéder est d'envoyer un message au serveur lorsqu'un évènement est déclenché côté client (par exemple appuyer sur la flèche haut), afin que celui-ci traite l'information et renvoie une réponse à l'ensemble des clients y compris le client qui a déclenché l'évènement. Cependant en cas de lag, le jeu se retrouve "freezé", votre personnage marche comme un robot, se teleporte ect. C'est le cas dans Counter Strike par exemple. Dans d'autres jeux, même lorsqu'il y a du lag, vous voyez votre personnage avancer normalement. C'est le cas dans Gears of War sur Xbox par exemple (bon c'est mon jeu Xbox préféré donc je le cite ). Lorsqu'il y a un décalage trop important, votre personnage se retrouve déporté en arrière, il retrouve son état de quelques secondes auparavant. Ce système permet de cacher en partie le lag, même si bien sûr ça ne résout pas le problème. C'est moins frustrant pour le joueur de pouvoir encore faire quelque chose malgré le lag que se retrouver totalement bloqué. C'est se qu'on appelle la prédiction (coté client). Pour en discuter, je propose une implémentation pour NodeJS et Socket.IO (oui je sais encore iffle.
RE: Client-side prediction - srm - 04-07-2012 La prédiction c'est bien, mais inutile pour notre cas, c'est utile pour les jeux qui nécessite beaucoup de rapidité, de l'ordre de la dizaine de milisecondes. RE: Client-side prediction - Maks - 04-07-2012 Pour un jeu temps réel utilisant les websockets pourquoi ça serait inutile ? RE: Client-side prediction - Ter Rowan - 04-07-2012 Mais quand est ce qu il y a correction ? Genre le serveur n est pas d accord avec la position du client ? La tel que je comprends, le joueur fait ce qu il veut sur son navigateur On pourrait imaginer qu il déplace son perso autrement que par le code client du concepteur (genre je me déplace deux fois plus vite que prévu) De fait tu vas a un moment ou un autre mettre un controle pour valider le déplacement du perso cote serveur Et la delta potentiel non ? Pourquoi broadcaster ? RE: Client-side prediction - Maks - 04-07-2012 Citation :Mais quand est ce qu il y a correction ? Oui Citation :1) La tel que je comprends, le joueur fait ce qu il veut sur son navigateur 1) Oui 2) Non, la vérification coté serveur existe toujours Citation :Et la delta potentiel non ? Pourquoi broadcaster ? La delta ? Le broadcast c'est pour prévenir les autres clients RE: Client-side prediction - t.bodeux - 04-07-2012 Citation :2) On pourrait imaginer qu il déplace son perso autrement que par le code client du concepteur Si jamais c'est le cas, c'est que tu as une grosse faille au niveau de ton code. Toute action coté navigateur doit être vérifiée côté serveur avant d'être validée et devenir persistante (BDD). Ca parrait super logique mais en fait c'est le genre de faille qui arrive très vite :S RE: Client-side prediction - atra27 - 04-07-2012 Qui parle de persistance? La prédiction c'est: J'appuye sur Z pour avancer, Mon jeu local envoie la commande pour avancer au serveur Mon jeu local joue l'anim est me fait avancer sur mon ecran Le serveur check, et renvoie la position réelle du joueur Mon jeu local fait une interpolation de sa version locale avec la version serveur-> on cache le lag au cours du temps. Bon pour un jeu par navigateur, c'est pas loin d'être useless... RE: Client-side prediction - Ter Rowan - 05-07-2012 Je vais reformuler La tel que je vois le code j ai li pression que jamais le serveur n envoie la position du perso a son joueur (aux autres oui, a lui non) Du coup je repose ma question : quand le serveur dit au joueur ou est son propre perso ? RE: Client-side prediction - niahoo - 05-07-2012 SI tu veux des anim fluides, je pense que c'est loin d'être useless au contraire. Dans mon jeu on dirigera des petits vaisseaux, quand on cliquera sur un point de la carte pour que le vaisseau s'y rende, je ferai partir l'anim immédiatement en direction de ce point et le serveur renverra ensuite un point plus proche (si j'ai cliqué sur un obstacle), ou légèrement décalé. RE: Client-side prediction - Sephi-Chan - 05-07-2012 Idem, je trouve ça très utile pour les performances ressenties de l'application. |