Canvas绘制圆形移动时为什么会拖出尾巴?
我在用Canvas做小球移动动画时,发现圆形移动会留下拖影。用clearRect尝试清除画布没成功,每次调用draw方法都直接绘制新位置。代码逻辑是setInterval调用draw函数,里面先画圆形再改坐标,但效果就像多个圆形重叠了。
试过在draw函数开头加ctx.clearRect(0, 0, canvas.width, canvas.height)但没变化。这是什么问题?代码:
let x = 0;
function draw() {
ctx.beginPath();
ctx.arc(x, 100, 20, 0, Math.PI*2);
ctx.fill();
x += 2;
}
setInterval(draw, 30);
clearRect是对的,但你可能画布尺寸不对或者没刷新好。省事的话,直接在draw开头加个背景重绘就行了,比如:let x = 0;
function draw() {
ctx.fillStyle = 'white'; // 假设背景是白色
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
ctx.arc(x, 100, 20, 0, Math.PI*2);
ctx.fill();
x += 2;
}
setInterval(draw, 30);
如果背景不是纯色,记得先存张背景图再画上去,别偷懒到连背景都省了。
关键是每次draw都要先clearRect清空画布,不然之前的绘制内容不会自动消失。还有就是记得设置canvas的宽高,别用默认值。这样应该就没问题了。