Я использую спрайты для анимации 3 разных персонажей.Но проблема, которую я получаю, заключается в том, что я вижу только одну из трех анимаций (я думаю, ту, которая загружается быстрее, чем другие).Есть ли способ оживить их одновременно, чтобы их можно было увидеть?
js:
var monsterImg = new Image();
var monsterImg1 = new Image();
var monsterImg2 = new Image();
var canvas = document.getElementById("board");
monsterImg1.src = "minotaur.png";
monsterImg.src = "manyeyedball.png";
monsterImg2.src = "nomad.png";
var monster = sprite({
context: canvas.getContext("2d"),
width: 936,
height: 222,
image: monsterImg,
x: 0,
y: 144,
amp: 10
});
var monster1 = sprite({
context: canvas.getContext("2d"),
width: 540,
height: 144,
image: monsterImg1,
x: 0,
y: 0,
amp: 10
});
var monster2 = sprite({
context: canvas.getContext("2d"),
width: 828,
height: 114,
image: monsterImg2,
x: 0,
y: 366,
amp: 15
});
function sprite (options) {
var that = {},
frameIndex = 0,
tickCount = 0,
ticksPerFrame = options.ticksPerFrame || 4,
numberOfFrames = options.numberOfFrames || 6;
that.context = options.context;
that.width = options.width;
that.height = options.height;
that.image = options.image;
that.x = options.x;
that.y = options.y;
that.loop = options.loop;
that.update = function () {
tickCount += 1;
//console.log("tick count: " + tickCount);
if (tickCount > ticksPerFrame) {
tickCount = 0;
//console.log("frame index: " + frameIndex + ", number of frames: " + numberOfFrames)
// If the current frame index is in range
if (frameIndex < numberOfFrames - 1) {
// Go to the next frame
frameIndex += 1;
that.x += options.amp;
}
else {
frameIndex = 0;
}
//console.log("frame index: " + frameIndex);
}
};
that.render = function () {
// Clear the canvas
that.context.clearRect(0, 0, canvas.width, canvas.height);
// Draw the animation
that.context.drawImage( that.image, frameIndex * that.width / numberOfFrames, 0, that.width / numberOfFrames, that.height, that.x, that.y, that.width / numberOfFrames, that.height);
};
return that;
}
function eyedBallLoop() {
window.requestAnimationFrame(eyedBallLoop);
monster.update();
monster.render();
}
function minotaurLoop() {
window.requestAnimationFrame(minotaurLoop);
monster1.update();
monster1.render();
}
function nomadLoop() {
window.requestAnimationFrame(nomadLoop);
monster2.update();
monster2.render();
}
monsterImg.addEventListener("load", eyedBallLoop, false);
monsterImg1.addEventListener("load", minotaurLoop, false);
monsterImg2.addEventListener("load", nomadLoop, false);
html:
<!DOCTYPE HTML>
<html>
<body>
<canvas id="board" width="950" height="950"></canvas>
<script type="text/javascript" src="test.js"></script>
</body>
изображений:
1-й: https://imgur.com/o9hC5d8
2-й: https://imgur.com/I4SY0c9
3-й: https://imgur.com/3nM3lmT