Анимация спрайтов

96
25 марта 2021, 09:20

Не могу понять, как исправить мигание анимации((

Сама картинка подобрана не с большим количеством кадров, но вроде как дело не в этом.

const canvas = document.getElementById('field'); 
let ctx = canvas.getContext('2d'); 
 
let sx = 0, 
  tick_count = 0; 
let sprite = new Image(); 
sprite.src = 'https://ratnotes.files.wordpress.com/2013/01/animal-2a.png'; 
sprite.onload = function() { 
  tick(); 
  requestAnimationFrame(tick); //вызов анимации 
}; 
 
function tick() { 
  if (tick_count > 10) { 
    drawCat(); 
    tick_count = 0; 
  } 
  tick_count += 1; 
  requestAnimationFrame(tick); 
} 
 
function drawCat() { 
  ctx.clearRect(0, 0, canvas.width, canvas.height); //очистка канваса 
  sx = (sx === 384 ? 0 : sx + 96); //переброс в начало, если спрайт закончился 384 - width картинки, 384/4 =96 -шаг, на который сдвигаем 
  ctx.drawImage(sprite, sx, 0, 96, 96, 100, 100, 96, 96); //отображение первого спрайта 
}
<canvas id="field" width="900" height="400">hi</canvas>

Answer 1

Четвертый спрайт заканчивается на 288: [0,96,192,288]. Дальше вы рисуете пустой спрайт, который вызывает эффект моргания. Исправьте границу sx: sx = (sx === 288 ? 0 : sx + 96);

const canvas = document.getElementById('field'); 
let ctx = canvas.getContext('2d'); 
 
let sx = 0, 
  tick_count = 0; 
let sprite = new Image(); 
sprite.src = 'https://ratnotes.files.wordpress.com/2013/01/animal-2a.png'; 
sprite.onload = function() { 
  tick(); 
  requestAnimationFrame(tick); //вызов анимации 
}; 
 
function tick() { 
  if (tick_count > 10) { 
    drawCat(); 
    tick_count = 0; 
  } 
  tick_count += 1; 
  requestAnimationFrame(tick); 
} 
 
function drawCat() { 
  ctx.clearRect(0, 0, canvas.width, canvas.height); //очистка канваса 
  sx = (sx === 288 ? 0 : sx + 96); //переброс в начало, если спрайт закончился 384 - width картинки, 384/4 =96 -шаг, на который сдвигаем 
  ctx.drawImage(sprite, sx, 0, 96, 96, 100, 100, 96, 96); //отображение первого спрайта 
}
<canvas id="field" width="900" height="400">hi</canvas>

READ ALSO
Как менять цвет текста при клике?

Как менять цвет текста при клике?

Изучаю JavaScriptХочу сделать, чтобы при клике на параграф текст в нём менял свой цвет на красный, а при повторном клике перекрашивался обратно...

116
Зачем нужен get prop()?

Зачем нужен get prop()?

Вот пример, где можно убрать get и ничего не измениться, так зачем он вообще нужен?

112
Не работает strings.includes и пр?

Не работает strings.includes и пр?

Туториал https://wwwyoutube

87
Отступ полученных данных при scraping&#39;e

Отступ полученных данных при scraping'e

Проблема в следующем есть блок с текстом в ктором вложен еще 1 болк с текстом, при получении данных текст сливается в одну сплошнуюВозможно...

98