IMTLille-Info / fa17-projet2

Groupe 1 du jeudi
2 stars 1 forks source link

Vitesse déplacement joueur diffère selon l'ordinateur #27

Closed ET-AD closed 9 years ago

ET-AD commented 9 years ago

Je viens de mettre le projet sur mon PC perso (je ne pouvais pas avant) et surprise!... la vitesse du joueur est grandement ralentie comparée à celle que j'ai depuis mon PC de boulot.

Suis-je seul où cela fait cela ?

PS : Je viens de faire un commit ("remane Object to Element") depuis mon PC perso...j'espère ne pas avoir transmit ce ralentissement que je ne m'explique pas pour le moment.

cdlm commented 9 years ago

Ça peut être dû à une différence de taux de raffraîchissement, selon comment vous recalculez les coordonnées. Le nombre de millisecondes depuis le dernier render() est passé en argument pour que vous puissiez faire le faire le calcul à partir d'une vitesse de déplacement en pixels par seconde.

2015-02-27 20:35 GMT+01:00 e-adriansen notifications@github.com:

Je viens de mettre le projet sur mon PC perso (je ne pouvais pas avant) et surprise!... la vitesse du joueur est grandement ralentie comparée à celle que j'ai depuis mon PC de boulot.

Suis-je seul où cela fait cela ?

PS : Je viens de faire un commit depuis mon PC perso...j'espère ne pas avoir transmit ce ralentissement que je ne m'explique pas pour le moment.

— Reply to this email directly or view it on GitHub https://github.com/TL1-fa17/projet2/issues/27.

Damien Pollet type less, do more [ | ] http://people.untyped.org/damien.pollet

florentvitse commented 9 years ago

Oui la vitesse dépend selon le PC ou même encore selon le nombre de fois où on le lance (quand je suis en dev ça me le fais) J'utilise la variable SLOW_ANIM dans la classe (anciennement mobile ou c'est p-e encore le cas) pour ralentir le mouvement pour qu'on voit le déplacement sur les PC puissants. Il faudrait pouvoir modifier cette variable au démarrage en fonction du PC.

cdlm commented 9 years ago

C'est du bricolage… et vu que les OS modernes adaptent la fréquence du processeur en fonction de la charge, comment voulez-vous déterminer le bon facteur ? D'autre part il est probablement important de contrôler précisément la vitesse de déplacement, parce que cela fait partie de l'expérience de jeu. Donc le déplacement doit correspondre précisément à ce qui est spécifié en pixels (ou cases) par seconde, à vous de faire une intégrale précise. Cela devrait même être testé.

florentvitse commented 9 years ago

J'ai fixé le framerate ainsi sur chaque PC le jeu devrait tourner à 160 fps [j'ai remis l'affichage des FPS pour voir plus simplement -> si @cdlm @e-adriansen @caronpe vous pouviez me dire si la vitesse est correcte est si l'affichage des FPS en haut à gauche est bien 160 ou 161 sur votre/vos PC]

caronpe commented 9 years ago

Je confirme, ça fonctionne chez moi!

cdlm commented 9 years ago

Encore une fois… est-il logique de coupler le fonctionnement du jeu aux performances graphiques du matériel ? Votre solution fonctionne peut-être ici, mais est-elle correcte, dans l'absolu ?

Limiter le framerate sert à ne pas gaspiller de ressources si l'écran n'affichera de toute façon que 30 ou 60fps. Au delà d'un minimum acceptable, le framerate est un paramètre de confort qui n'influence que la fluidité des animations, pas leur vitesse (donc le gameplay).

On peut argumenter qu'il faut un temps logique pour que le déroulement du jeu soit déterministe, que c'est certainement utile si le framerate est un multiple du temps logique, mais confondre les deux me semble incorrect.

florentvitse commented 9 years ago

J'y est déjà passé mal de temps sur ce sujet (compter en jours) est c'est pour l'instant la plus facile solution car avant on devait changer une variable.

Je comprends que je fais l'amalgame entre deux notions différentes mais faute de mieux pour l'instant, je pense qu'il faut garder ça.

[Je suis en train de repenser la solution en incluant le delta dans les calculs]

florentvitse commented 9 years ago

J'ai eu un éclair pendant la nuit, je pense avoir trouvé une solution pour la vitesse, j'ai repris le delta, je fais bouger le personnage toutes les 5ms. Ça devrait être pareil sur chaque PC. La vitesse est fixe désormais donc il faut voir si j'ai choisis la bonne selon vous sinon j'accélère ou ralentis :)

J'attends des retours en espérant positifs sur votre/vos PC ?

florentvitse commented 9 years ago

Alors des retours ?

cdlm commented 9 years ago

J'avais pensé à une solution de ce genre, accumuler les millisecondes tant qu'elles ne suffisent pas à justifier un déplacement d'au moins un pixel. Cela évite de passer par des coordonnées en virgule flottante, c'est probablement mieux au final, car on évite les erreurs d'arrondi (enfin ça en donne la possibilité…).

Par contre je ne comprends toujours pas pourquoi, plutôt que changer la position de ±1, vous n'exprimez pas le problème en terme d'un vecteur vitesse multiplié par le temps écoulé et ajouté à la position… (même si pour les faibles vitesses et hauts framerates il faut faire attention aux arrondis, d'où les discussions jusqu'ici). Le code ne vous semblerait pas plus clair ?

florentvitse commented 9 years ago

Le vecteur vitesse c'est on attend 4 ms et on bouge le personnage équivaut à un déplacement de 1 px toute les 4 ms si vous voulez. Les arrondis, on essaie d'éviter car on veut des déplacement case par case, ça fonctionne très bien comme ça.