Здравствуйте!
Мне нужно увеличить скорость персонажа при зажатой клавише пробел.
document.addEventListener("keydown", e=>{
if(e.key === " "){
setMovementSpeedToSpeedUp(); // увеличиваем скорость персонажа
};
});
document.addEventListener("keyup", e=>{
if(e.key === " "){
setMovementSpeedToNormal(); // устанавливаем скорость на нормальное значение
};
});
проблема этого кода, что в браузере при зажатой клавише - событие срабатывает очень много раз, пока клавишу не отпустят. Получается за 2 секунды зажатого пробела, функция
setMovementSppedToSpeedUp()
сработает кучу раз. А мне это не нужно. Я могу победить эту ситуацию путём ввода в программу некого состояния по типу
gameSpeedIncreasedState
(состояние указывает на то увеличена ли скорость игры или нет в данный момент)
let gameSpeedIncreasedState = false;
function increaseMovementSpeed(){
if(gameSpeedIncreasedState) return;
gameSpeedIncreasedState = true;
// код для увеличения скорости игрока
};
Но это же дополнительное условие
if(gameSpeedIncreasedState) return;
которое будет проверяться каждый раз, когда срабатывает обработчик события зажатой кнопки (т.е. очень много раз), хотелось бы избежать лишней переменной
gameSpeedIncreasedState
, да ещё и проверки. Может у кого то есть подходящее решение, буду благодарен, пока ничего просто в голову не пришло!