HTML5删除画布中先前绘制的对象

Ani*_*ish 10 javascript html5 html5-canvas

借助方法moveTo和方法,我在HTML5画布中绘制了一个多边形对象(比如汽车)lineTo.我想在画布中的不同位置重复绘制该对象(模拟移动对象).我的问题是以前绘制的对象没有被清除.而是在画布上绘制多个图像.我该如何解决这个问题?

Tom*_*Tom 11

您必须在每个绘制框架的开头清除画布

context.clearRect(0, 0, canvas.width, canvas.height);
Run Code Online (Sandbox Code Playgroud)

  • 是的,你必须重新绘制背景和汽车的新位置.或者,如果背景不移动,您可以直接在画布下面分层图像.这样你就不必每次都重绘背景 - 只需重新绘制移动的汽车. (2认同)

Aln*_*tak 10

画布只是像素阵列,它们对您绘制的形状一无所知.

以前用于位图显示的动画技巧(例如"xor drawing")可用于在绘制新形状之前移除旧形状,但在现代机器上它通常更简单(并且非常快)擦除画布并为每个帧重新开始.

鉴于您对其他答案的评论,我建议只使用两个画布 - 一个用于静态背景,一个用于汽车.如果背景图像是静态的,它甚至可以是一个<img>元素而不是Canvas.

如果汽车图像是静态的,您也可以只绘制一次,然后使用CSS定位来设置相对于每帧的背景的位置.

  • @OP您还可以在单​​独的画布元素上绘制背景和叠加层,并在动画循环结束时将它们合并回来. (3认同)
  • @rlemon甚至不需要合并它们 - 使用CSS定位你可以只有一个在另一个之上 (2认同)