Вспоминаем физику: там, вроде, были всякие скорости и ускорения )
Отпускаешь птичку — она падает, ускоряясь. Её скорость растёт на постоянную величину за ед. времени. По нажатию на кнопку «вверх», птичка перемещается выше и её скорость сбрасывается на 0, падение начинается с начала.
Надо запоминать время последнего нажатия, и дальше положение птички считать относительно этого момента и текущего времени.
h = g * t^2 / 2
, где g — постоянная, ускорение свободного падения. В игре не метры, а пиксели, и надо подобрать значение константы, чтобы не слишком быстро, не слишком медленно ускорялось тело. На глаз.
Ну и конечно, ошибкой было добавлять слушателя события снова и снова в ф-ии
update()
. Это достаточно сделать только 1 раз.
let startTime = Date.now();
// Функция Прыжка
const moveUp = () => {
ghost.y -= 50;
startTime = Date.now();
};
document.addEventListener('keydown', moveUp);
function update() {
// Физика
const dt = Date.now() - startTime;
ghost.y += dt ** 2 / 100; // подобрать число
// Границы
ghost.x = Math.min(900, Math.max(0, ghost.x));
ghost.y = Math.min(650, Math.max(0, ghost.y));
}