Mon personnage se bloque après plusieurs déplacements rapides
Posté : 12 sept. 2026, 10:43
Bonjour,
Je travaille sur un petit jeu en JavaScript avec un personnage qui se déplace sur une grille. J'ai un problème assez étrange: après plusieurs déplacements rapides, le personnage peut rester bloqué pendant quelques secondes. Les touches sont pourtant toujours détectées.
Voici la partie du code qui gère le déplacement:
Je pense que le problème vient de `player.moving`, mais je ne comprends pas pourquoi il reste parfois bloqué alors que le `setTimeout` devrait remettre la valeur à `false`. Basketball Bros
Est-ce que quelqu'un voit ce qui pourrait provoquer ce comportement?
Je travaille sur un petit jeu en JavaScript avec un personnage qui se déplace sur une grille. J'ai un problème assez étrange: après plusieurs déplacements rapides, le personnage peut rester bloqué pendant quelques secondes. Les touches sont pourtant toujours détectées.
Voici la partie du code qui gère le déplacement:
Code : Tout sélectionner
const player = {
x: 2,
y: 2,
moving: false
};
const keys = {};
document.addEventListener("keydown", function(e) {
keys[e.key] = true;
});
document.addEventListener("keyup", function(e) {
keys[e.key] = false;
});
function movePlayer() {
if (player.moving) return;
let newX = player.x;
let newY = player.y;
if (keys["ArrowLeft"]) newX--;
if (keys["ArrowRight"]) newX++;
if (keys["ArrowUp"]) newY--;
if (keys["ArrowDown"]) newY++;
if (newX !== player.x || newY !== player.y) {
player.moving = true;
if (isBlocked(newX, newY)) {
player.moving = false;
return;
}
player.x = newX;
player.y = newY;
drawPlayer();
setTimeout(function() {
player.moving = false;
}, 100);
}
}
function gameLoop() {
movePlayer();
requestAnimationFrame(gameLoop);
}
gameLoop();Est-ce que quelqu'un voit ce qui pourrait provoquer ce comportement?