我在画布上画线有点问题,
基本上,我希望线条是漂亮、柔软和半透明的,然而画布似乎只想在最后渲染的线段上这样做。
看看这里,你会发现最后画的线段很漂亮。。好吧,我想怎么做)然而,随着动画的播放,之前画的线变得粗糙和肮脏。
我注意到,如果我使用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/
有几种方法可以解决这个问题:
- 将当前正在绘制的对象保存在临时画布上(可能很棘手)
- 将先前绘制的状态保存到临时画布(不那么棘手)
- 把这三条路当作一条路来记录(很容易,所以我会帮你做的)
要做#3,我们所要做的就是不要在每个新部件的开头调用beginPath
。相反,我们在一开始只调用beginPath
一次,每个新部件都只是一个moveTo
操作!
http://jsfiddle.net/xSPuM/8/
这些信息应该足以让你走上正轨!