JeuWeb - Crée ton jeu par navigateur
[jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - 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 : [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé (/showthread.php?tid=6494)

Pages : 1 2


[jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Argorate - 08-11-2012

Bonsoir,

j'ai un petit soucis, je vous montre en live ça sera plus simple:

http://www.rapturestudio.fr/partage/test.html

si vous appuyez un coup et relachez et réappuyez juste après et cette fois-ci en laissant appuyé, vous verrez une petite latence durant laquelle le div ne bouge pas!

Plus simple peut être: laisser appuyé dans une direction puis laisser appuyé dans une autre direction, vous verrez également la fameuse latence, le changement de direction n'est pas immédiat!

Je ne sais pas d'où ça vient donc encore moins comment le régler...

Le pb c'est que ça nuit gravement a la fluidité du mouvement et c'est la base si on veux faire du temps réel... Imaginez une tel latence si vous voulez esquivez tout a coup un projectile? C'est ennuyeux !

Toute aide sera la bienvenue !


RE: [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Maks - 08-11-2012

On voit la petite latence oui... De toute façon même avec ça le mouvement ne fait pas très fluide ! C'est le problème avec l'animation d'éléments DOM en général

Je n'ai pas vérifié le code source de jQuery pour cette partie mais moi je le vois comme ça :
Lorsque tu changes de direction, l'animation dans l'autre sens (rafraîchit via un timer il me semble) n'est pas terminée.
Du coup tu te retrouves avec une queue d'event qui contient d'abord la fin de cette animation puis l'animation à venir.
De ce fait lorsque tu changes de direction, le changement n'est pas instantané d'où l'impression du surplace durant quelque millisecondes.

A cette latence peut aussi se rajouter le temps que JS met à prendre en compte ton keydown, ralentissant ton timer du fait de la nature mono-threadée du langage (cf. http://ejohn.org/blog/how-javascript-timers-work/).


RE: [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Argorate - 08-11-2012

Le problème ne provient pas de la queue de jQuery puisque le p.stop() est là pour ça (enlève le et du verra qu'il fini une animation avant de commencer la suivante), non là j'ai l'impression que c'est le temps qu'il laisse entre "j’appuie une fois" et "je laisse appuyé", un peu comme un temps minimal avant de différencié simple click et double click, mais je ne vois pas comment passer outre?!


RE: [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Plume - 09-11-2012

Dans le premier cas, je n'ai aucune latence.

Dans le deuxième cas, il y a un délai effectif entre "J'appuie une fois" et "J'appuie longtemps". Je crois que c'est lié à l'OS. Sur Mac, par exemple, je peux dire combien de temps je veux que dure cet intervalle.

Une réponse sur SO : http://stackoverflow.com/a/3691661


RE: [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Argorate - 09-11-2012

Dans le premier cas cela fait pareil... laisse appuyé dans une seul et même direction, tu vas avoir le mouvement une fois, puis un blanc puis sa va reprendre jusqu’à ce que tu lâches...

je vais tester le code de SO, je vous direz si problème il y a Wink

thx

EDIT: en fait ce qui m’embête c'est de devoir créer un timer qui fait une boucle infini juste pour le déplacement, ça alourdi vachement, alors qu'une simple détection d'event serait tellement mieux, ça embête vraiment cette histoire Confused


RE: [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Plume - 09-11-2012

J'ai pas le comportement que tu m'indiques.


RE: [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Argorate - 09-11-2012

Vraiment étrange alors... ça dépendrait des OS? C'est un peu n'importe quoi Confused
Je vois pas comment faire sans la cheat de la boucle infini qui est plutot lourd (comme proposé sur SO)...


RE: [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Maks - 09-11-2012

J'avais pas vu ton stop() dans le code source. Mais ma deuxième supposition tiens toujours ^^

Tu devrais essayer le code de stack que t'as linké Plume, voir ce que ça donne Smile


RE: [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Argorate - 09-11-2012

Ça fonctionne, cependant cela alourdi pas mal d'avoir plein de timer à gérer par rapport à des event qui font trigger mais bon.

Maintenant, autre problème: comment faire pour ne pas autoriser le déplacement en diagonale?

C'est à dire si je laisse appuyez LEFT (ça va a gauche) et ensuite j'appuis UP sans relâcher LEFT(ça doit allez uniquement haut et pas haut + gauche).
Cependant on ne peux pas juste détruire le timer LEFT! Il faut que lorsqu'on relâche UP, (et qu'on maintient toujours LEFT), cela se redéplacer à gauche (sans que j'ai arrêter d'appuyé sur LEFT, donc avec le timer initial)...

Une idée? Big Grin


RE: [jQuery] Latence keydown pour bouger un div lorsqu'on laisse appuyé - Plume - 09-11-2012

Voilà le comportement que j'ai : https://vimeo.com/53151619