如您在上图中所看到的,我的等距正方形之间有可见线,这是由于每个正方形彼此重叠而造成的。现在,由于我用来绘制的坐标系(并且我不想更改它),因此不可避免地会出现重叠。

这是我用来绘制正方形的代码

cRenderContext.beginPath();

cRenderContext.moveTo(iPosX, iPosY);
cRenderContext.lineTo(iPosX + iTileWidthIncrement, iPosY - iTileHeightIncrement);
cRenderContext.lineTo(iPosX + iTileWidth, iPosY);
cRenderContext.lineTo(iPosX + iTileWidthIncrement, iPosY + iTileHeightIncrement);
cRenderContext.lineTo(iPosX, iPosY);

cRenderContext.fillStyle = "rgba(1, 0, 1, 1)";
cRenderContext.fill();
cRenderContext.closePath();

我要实现的是在没有任何可见轮廓的情况下绘制正方形,所以基本上有没有办法停止填充以完成当前重叠的事情?

编辑:我会提到每个正方形的绘制颜色略有不同,所以我不能只用一种颜色填充整个区域并完成(它看起来全是黑色,但红色或蓝色 channel 中的每种颜色相差1)

最佳答案

比较一下:

http://jsfiddle.net/HmVtz/

有了这个:

http://jsfiddle.net/HmVtz/1/

看到不同?



代码上的区别是我在绘制一个半像素而不是一个像素。这样的 Canvas 很奇怪。有时请阅读抗锯齿/亚像素渲染。

有关为什么这样做的简单说明,请参见“Ask Professor Markup here”。

09-27 01:07