Я создаю небольшую игру, похожую на Chicken Invaders , используя JS Canvas.В настоящее время я застрял с эффектом взрыва вашего корабля, когда враг поражает ваш корабль.Я пытаюсь создать эффект самостоятельно в отдельном файле.
Моя идея состоит в том, что когда враг поражает вас, серия изображений (14 изображений) будет воспроизводиться в быстрой последовательности, так что это даетиллюзия взрыва.Поэтому я включил теги <img>
, я поместил их все в массив (используя querySelectorAll
), а затем создал эффект взрыва.Я использовал счетчик для итерации по массиву и отображения каждого изображения соответственно.
Но затем счетчик просто продолжает увеличиваться, так что в конечном итоге это приведет к indexError
, поскольку он выходит за пределы диапазона массива.Я пытался использовать return
для завершения функции и cancelAnimationFrame()
, но оба они не работали.
В результате в консоли постоянно появляются 60 ошибок в секунду (что, конечно,все испортит) Достаточно jebba-jabba, вот ссылка на JS-Fiddle:
https://jsfiddle.net/h7Lvpytm/8/
Вот моя попытка решить эту проблему:
const canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
const video = document.querySelector("video");
const boomFrames = document.body.querySelectorAll("img");
let counter = 0;
function drawBoom() {
requestAnimationFrame(drawBoom)
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.drawImage(boomFrames[counter], 0, 0, 200, 96);
counter++;
if (counter > 13) {
cancelAnimationFrame(drawBoom)
}
}
drawBoom()
РЕДАКТИРОВАТЬ: Я также пробовал цикл while
, но он даже не отображал взрыв.Это сводит меня с ума.