【发布时间】:2019-04-25 07:20:24
【问题描述】:
我制作了一个画布,可以在上面绘制形状。当我想删除它们时,我基本上会再次创建相同的形状,但它是白色的,所以我不会删除任何其他形状(保存了 x 和 y 坐标,所以不用担心)
ctx.fillStyle="#FFFFFF";
ctx.strokeStyle="#FFFFFF";
ctx.beginPath();
ctx.arc(x, y, 40, 0, 2 * Math.PI);
ctx.fill();
问题是在某些形状上仍然有剩余的黑色休息,我无法摆脱(其他形状甚至更糟)
我错过了什么?
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(50,50 , 40, 0, 2 * Math.PI);
ctx.fill();
ctx.fillStyle="#FFFFFF";
ctx.strokeStyle="#FFFFFF";
ctx.beginPath();
ctx.arc(50,50 , 40, 0, 2 * Math.PI);
ctx.fill();
<canvas id="myCanvas" width="1000" height=600 style="border: 1px solid #000000;">
</canvas>
编辑:https://jsfiddle.net/sfj5y091/3/
编辑 2: 我最终解决了这个问题,通过在系统中删除一个形状后完全重绘所有形状,甚至可以删除重叠的形状而不破坏另一个形状
【问题讨论】:
-
你能给我们做一个基本的工作例子吗?也许在 JSFiddle 甚至在 StackOverflow Code example editor?
-
你应该使用清晰的重绘不是要走的路。也许这有助于stackoverflow.com/questions/10396991/…
-
canvas 真的不具备处理将图纸视为单独对象的能力。与其重绘,不如只保存以前的状态并重新渲染它们,而不是在画布上添加更多的绘图。如果你真的必须能够单独处理绘制的东西,那么 SVG 可以更好地做到这一点。
-
您可以有 2 个画布(一个在另一个之后),您可以将有关您正在绘制的形状的信息保存在一个结构中。当您必须擦除一个形状时,您只需重新绘制除第二个画布上擦除的形状之外的所有形状。要显示第二个画布,请放置一个大于第一个画布的 CSS z-index 属性。这称为Double buffering
-
@Fuseldieb thx 指出,有一个 StackOverflow 编辑器,这个网站很棒
标签: javascript html5-canvas shapes