Я сделал простую анимацию спрайтов, но она слишком быстрая. Он тоже почему-то мигает.
Мой код:
<!doctype html>
<html>
<head>
<script type="text/javascript" src="raf.js"></script>
<script>
var ctx;
var count = 0;
var x;
var y;
var img = new Image();
img.src = "images/character.png";
img.onload = draw;
function draw() {
requestAnimationFrame(draw)
ctx.clearRect(0,0,450,586);
x = (count % 16) * 450;
y = Math.floor(count / 16) * 586;
ctx.drawImage(img, x, y, 450, 586, 0, 0, 450, 586);
if(count == 16){
count = 0;
} else {
count++;
}
}
function init() {
ctx = document.getElementById("canvas").getContext("2d");
}
</script>
</head>
<body onload = "init()">
<canvas id="canvas" width="800" height="600">
</canvas>
</body>
</html>
Есть ли способ исправить это?
requestAnimationFrame
запускает (или пытается запустить) обратный вызов со скоростью обновления монитора. Стандартное решение управления скоростью анимации — привязать изменения значений ко времени, а не к обновлениям экрана. - person weaknespase   schedule 09.03.2016count++
наcount+=.1
и убедитесь сами. - person weaknespase   schedule 09.03.2016x = (count % 16) * 450
: умножьте 16 на 450 и сравните с шириной. - person weaknespase   schedule 09.03.2016if(count == 16)
count
никогда не может быть равно 16. Прочтите о числах с плавающей запятой и замените оператор равенства оператором «больше или равно» (>=
). Кроме того, вы можете использоватьfillRect
вместоclearRect
и исправить его положение, чтобы стереть/перерисовать область, где был спрайт - это может уменьшить мигание. - person weaknespase   schedule 09.03.2016