【发布时间】:2019-01-06 19:45:40
【问题描述】:
我是第一次使用画布动画,但在尝试同时为多个图像制作动画时遇到了问题。
我可以在画布上绘制多个图像并随机放置它们。我可以让单个图像在画布上进行动画处理,但只能从数组中绘制最后一个图像。
我知道问题在于 clearRect() 从所述数组中清除所有以前绘制的图像,但无法弄清楚如何在每个动画帧中绘制完所有图像后才清除所有图像,我想知道是否有人处理过以前像这样的东西,如果他们能指出我在绘制所有图像后如何只清除矩形()的正确方向?
function animate() {
srequestAnimationFrame(animate);
for(let i = 0; i < images.length; i++) {
let y = images[i].y;
let img = new Image();
img.src = images[i].url;
img.onload = function() {
// This is clearing all images drawn before the last image
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(this, images[i].x, y, images[i].width, images[i].height);
}
images[i].y -= 1;
if(images[i].y < (0 - images[i].height)) {
images[i].y = window.innerHeight;
images[i].x = (Math.random() * (canvas.width - 160));
}
}
}
我想将所有图像垂直向上设置动画,并在到达屏幕顶部后重置到底部,我有这个工作但仅适用于上面提到的最后一张图像
【问题讨论】:
-
仅在您的
animate()函数中执行与动画相关的操作。加载图像是初始化,而不是动画。在初始化期间在单独的函数中加载一次图像。
标签: javascript animation canvas