画布锯齿状的边缘因线条/笔触而变得粗糙



我在画布上画线有点问题,

基本上,我希望线条是漂亮、柔软和半透明的,然而画布似乎只想在最后渲染的线段上这样做。

看看这里,你会发现最后画的线段很漂亮。。好吧,我想怎么做)然而,随着动画的播放,之前画的线变得粗糙和肮脏。

我注意到,如果我使用closepath,这种情况不会发生,但是,由于间隔/动画的原因,我不能在每次渲染时都使用这种方法,因为线到处都是:

http://jsfiddle.net/xSPuM/1/

任何人如果对如何阻止这种情况的发生有任何想法,我将不胜感激。

非常感谢

奇怪的代码!动画很巧妙,尽管这样做的方式似乎有点独特,所以让我们来看看。

首先,为了完全清楚,当你在走一条路时,你可以继续一遍又一遍地划它。

因此,如果你有一条有三条线段a、B、C的路径,你会这样做:

A、 冲程,B,冲程,C,冲程

您将得到分段A笔划3次、B笔划2次和C笔划一次。

这基本上就是你在这里所做的。

你可以通过在你的道路尽头只抚摸一次来轻松避免这种情况:

http://jsfiddle.net/xSPuM/5/

这将停止动画,但说明问题所在。您可以通过清除屏幕来修复动画。因此,对于分段ABC,我们将要做的是:

A、 清除,冲程,B,清除,冲程、C,清除,笔划

然后你会让片段A被划动一次,屏幕被清除,然后片段A-B被划动一遍,屏幕最后一次被清除,所以片段A-B-C被划动一下。这就是你想要的。

问题是,清除屏幕意味着清除所有以前绘制的形状!请参阅此处:

http://jsfiddle.net/xSPuM/7/

有几种方法可以解决这个问题:

  1. 将当前正在绘制的对象保存在临时画布上(可能很棘手)
  2. 将先前绘制的状态保存到临时画布(不那么棘手)
  3. 把这三条路当作一条路来记录(很容易,所以我会帮你做的)

要做#3,我们所要做的就是不要在每个新部件的开头调用beginPath。相反,我们在一开始只调用beginPath一次,每个新部件都只是一个moveTo操作!

http://jsfiddle.net/xSPuM/8/

这些信息应该足以让你走上正轨!

最新更新