Я пытаюсь использовать метод requestAnimationFrame с помощью, которую я могу найти в Интернете. Я могу перемещать элемент, но когда я хочу делать это со спрайтами, я теряюсь.Перемещение с setInterval метод requestAnimationFrame со спрайтом
Например, приведенный ниже код работает нормально с 'setInterval', но мне не удается заставить его работать с 'requestAnimationFrame'.
<!DOCTYPE html>
<html>
<head>
<title>Animating Sprites in HTML5 Canvas</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, user-scalable=no">
<style>
.demo {background: #aaaaaa;}
#myCanvas{background: #cccccc}
</style>
</head>
<body class="demo">
<canvas id="myCanvas" width="800" height="100"></canvas>
<script>
(function() {
// Canvas
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
// Set the fill style for the drawing context.
ctx.fillStyle = '#3399ff';
// VARIABLES
var width = 48; // Width CANVAS
var height = 60; // Height CANVAS
var xFrame = 0; // Frame x coordinate
var yFrame = 0; // Frame y coordinate
var dxFrame = 0; // Frame dx position in canvas
var dyFrame = 0; // Frame dy position in canvas
// SPRITE used
image = new Image()
image.src = 'myRunner2.png';
//
var requestID;
// shim layer with setTimeout fallback
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element){
window.setTimeout(callback, 1000/60);
};
})();
// FUNCTION DRAWING MOVE (xFrame = 0 & yFrame = 1)
var drawMove = function(){
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(image, width * xFrame, height * yFrame, width, height, dxFrame, dyFrame, width, height);
if (xFrame == 7) {
xFrame = 0;
} else {
xFrame++
dxFrame+=2;
}
//window.requestAnimFrame(eMove);
}
// ANIMATION in 3 moves: Idle + Move + Tired
var intA;
function eMove() {
// Runner in motion (8 frames)
yFrame = 1;
xFrame = 0;
clearInterval(intA);
intA = setInterval(drawMove, 100);
}
eMove();
}());
</script>
</body>
</html>
Я ищу помощь по этой проблеме, часть кода будет большим, но способ работы или направление искать будет хорошо, как хорошо. Как манипулировать спрайтом с помощью метода requestAnimationFrame?
В конечном счете, моя цель - переместить спрайт в одном направлении и фон в другом направлении. Я могу перемещать спрайт в одном направлении с помощью методов setTimeout/setInterval, или я могу перемещать в другом направлении фон с помощью requestAnimationFrame, но также и отдельно.
Надеюсь, вы понимаете мою проблему. Спасибо,
JLuc01
Это величайшая вещь в JavaScript, поскольку jQuery, делает для супер гладкой анимации и удивительно легко понять. Так что для использования его «setTimeout» - уродливый утенок. – Shikkediel