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


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

tu laisses pas appuyé au début là? puisqu'il y a une différence de vitesse.

Si tu appuis et que tu relâches pas, tu n'as pas un petit temps de latence?
Ma foi... c'est peut être lié à l'OS comme on le disait...


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

J'ai deux phases. La première, je dessine un carré sans lâcher la touche. Dans la deuxième, j'appuie avec répétition.


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

(09-11-2012, 04:16 PM)Argorate a écrit : 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

tu fais une pile en plus des 4 statuts
le dernier élément de la pile est la direction a condition que le statut de la direction soit "appuyé"
a chaque nouvelle touche appuyée tu ajoutes à la pile, en plus de son statut.
a chaque relache d'une touche, tu supprimes du statut, et tu controles la pile

le premier appui de left ==> left = true, pile = left
le dernier élément de la pile est left, donc tu vas a gauche

tu laisses appuyé left
le dernier élément de la pile est left, donc tu vas a gauche

deuxième appui sur up ==> left = true, up = true, pile = left + up
le dernier élément de la pile est up donc tu vas en haut

tu laisses appuyé left + up
le dernier élément de la pile est up donc tu vas en haut

tu laches up -> left = true, up = false, -> tu supprimes up de la pile -> pile =left
le dernier élément de la pile est left, donc tu vas a gauche

troisième appui sur up ==> left = true, up = true, pile = left + up
le dernier élément de la pile est up donc tu vas en haut

tu relâches left -> up = true, left = false -> tu supprimes left de la pile -> pile = up
le dernier élément de la pile est up donc tu vas en haut

tu laisses appuyé up
le dernier élément de la pile est up donc tu vas en haut

tu relâches up -> up = false -> tu supprimes up de la pile -> pile = vide
pas d'éléments dans la pile, la boucle s'arrête

enfin j'ai pas testé mais je ferais ainsi


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

Pour éviter les déplacements en diagonale pour mon jeu j'empêche qu'on puisse enfoncer deux touches de direction en même temps


keys = length: 0
$(window).keyup (e) -> if keys[e.keyCode] then keys[e.keyCode] = false; --keys.length
$(window).keydown (e) -> unless keys[e.keyCode] then keys[e.keyCode] = true; ++keys.length

puis


$(window).keydown (e) ->
if keys.length > 1 then return false
#...



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

Moi pour éviter les latences je faisais comme ça :

var move_left = false;

var move_to_left = function() {
while (move_left) {
bouger_le_div_vers_la_gauche();
}
};

$(window).keydown(LEFT, function() {
move_left = true;
setTitemout(move_to_left,0);
})

$(window).keyup(LEFT, function() {
move_left = false;
})



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

niahoo: ce que tu fais c'est exactement le principe du lien de plume mais en plus sale et moins structuré :p

Marks: du coup tu n'as pas "mon" pb de latence en utilisant directement keydown de jQuery?

Sinon, comme je l'ai dit dans mon exemple, je veux qu'on puisse appuyer sur deux touches en même temps, mais que seul la dernière soit prise en compte et si on la relâche, celle qui reste reprend la main en quelque sorte.
Du coup je pense tester la solution de pile proposé par Ter rowan, parce que je trouve ça chiant d'obliger le joueur à presser et relâcher les touches de direction tout le , puisqu'on les empêche d'en avoir deux en même temps...


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

Je ne sais pas moi je suis pas vraiment dans la même optique, mes déplacements sont animés donc beaucoup plus lent. Du coup il n'y a pas ce problème de latence.

PS : Apelle moi Maks ou Max j'ai l'impression que tu me prends pour un coco là ^^


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

oui bon, j'ai pas relu tout le topic et j'ai codé ça directement dans le champ de réponse. mais ça marche bien. AU lieu de tailler tu ferais mieux de t'en inspirer pour y penser tout seul la prochaine fois Wink