Witam z uśmiechem,
otóż ostatnio zacząłem pracować z elementem canvas. Poniżej jest obraz, który używam do animowania efektu poruszania się. Problem polega na tym, że kiedy kliknę a (lewo) lub d (prawo) - animacja poruszania przez chwile idzie w wybranym kierunku przez (około) pierwszą sekundę kawałkiem obrazka z pierwszej kolumny wiersza 2(klikając a)/5(klikając d), a po tej chwilce zaczyna ostro animować tak jak powinno, ze kolejne dwa (razem trzy) na zmianę się zmieniają. Wie ktoś może na czym polega problem?
Na wszelki cały kod, ale problem najpewniej będzie widniał w move.js lub animate.js. Z góry dzięki za wszelką pomoc!
index.html:
<!DOCTYPE html>
<html>
<head>
<title>document</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<canvas id="myCanvas" width="1000px" height="500px"></canvas>
<script src="js/specification.js"></script>
<script src="js/draw.js"></script>
<script src="js/animate.js"></script>
<script src="js/move.js"></script>
</body>
</html>
draw.js:
var myImage = new Image();
myImage.src = 'img/man.png';
myImage.addEventListener('load', loadImage, false);
function loadImage(e){
animate();
}
function animate(){
ctx.clearRect(0, 0, 1000, 500)
ctx.drawImage(myImage, shiftX, shiftY, frameWidth, frameHeight, xMan, yMan, frameWidth, frameHeight);
xMan += dx;
requestId = requestAnimationFrame(animate);
}
move.js:
document.addEventListener("keydown", isKeyDown, false);
document.addEventListener("keyup", isKeyUp, false);
function isKeyDown(e){
if(e.key == "d"){
moveRight();
dx = velocity;
}
if(e.key == "a"){
moveLeft();
dx = -velocity;
}
}
function isKeyUp(e){
if(e.key == "d"){
moveStopRight();
dx = 0;
}
if(e.key == "a"){
moveStopLeft();
dx = 0;
}
}
animate.js:
function moveStopRight(){
shiftY = 0;
shiftX = 0;
}
function moveStopLeft(){
shiftY = frameHeight*3;
shiftX = 0;
}
function moveRight(){
shiftX += frameWidth;
shiftY = frameHeight;
if(shiftX >= frameWidth*3){
shiftX = 0;
}
}
function moveLeft(){
shiftX += frameWidth;
shiftY = frameHeight*4;
if(shiftX >= frameWidth*3){
shiftX = 0;
}
}
specification.js:
var canvas = document.querySelector('#myCanvas');
var ctx = canvas.getContext('2d');
//start&stopMainAnimate
var requestId;
//animateMan
var shiftX = 0; //startXImage
var shiftY = 0; //startXImage
var frameWidth = 90; //oneFrame
var frameHeight = 100; //oneFrame
var xMan = 0;
var yMan = 400;
var dx = 0;
var velocity = 3;