У меня есть анимация для игры, над которой я работаю, которая, похоже, не повторится. Когда нажимается пробел, он вызывает событие, которое «стреляет» по кругу вверху холста. Проблема в том, что при повторном нажатии клавиши она не будет инициировать анимацию. Вот пример кода, который я написал:Javascript canvas анимация не может использоваться более одного раза
var canvas, ctx,
spaceKey = false,
upKey = false,
downKey = false,
canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
shotX = 150, shotY = 280;
function loop() {
if (spaceKey) shoot();
}
function keyDown(e) {
if (e.keyCode == 32) spaceKey = true;
}
function keyUp(e) {
if (e.keyCode == 32) spaceKey = false;
}
function shoot() {
setTimeout(function() { if (shotY > 0) {
ctx.clearRect(shotX-5,shotY-5,600,20);
ctx.beginPath();
ctx.arc(shotX, shotY,4,0,Math.PI * 2, false);
ctx.fillStyle = "yellow";
ctx.fill();
ctx.closePath();
shotY = shotY - 1;
shoot();
} else
ctx.clearRect(shotX-5,shotY-5,600,20);
}, 100);
}
(function init() {
setInterval(loop, 10);
document.addEventListener('keydown', keyDown, false);
document.addEventListener('keyup', keyUp, false);
})();
//init();
Причина я использую keyUp
и keyDown
потому, что у меня есть другие функции, которые используют разные ключи. Этот код был изменен для отображения только этой функции. Чтобы было легче видеть, о чем я говорю, я создал JSFiddle. Другие функции, которые у меня есть, аналогично структурированы и работают, с той лишь разницей, что его продолжительность не контролируется напрямую нажатием клавиши.
Если зажать пробел, вы получите ** ** несколько KeyDown события увольняют. В вашем коде это приводит к тому, что желтый шар ускоряется, когда он поднимается по экрану. Вы пытаетесь ускорить игру или пытаетесь стрелять несколькими шарами с одинаковой скоростью? – markE
Это должно быть несколько пуль.Я думал, что заметил, что все быстрее. –
Если пуля находится в движении вверх по экрану, пользователь может нажать пробел и запустить еще одну пулю? Или пользователь должен подождать, пока текущая пуля не выйдет из экрана? – markE