请查看picture(抱歉,新用户无法将图片直接插入帖子中)。 线条绘制为半透明颜色(alpha = 0.5)。 当红线与自身交叉时,不会出现双重叠加半透明颜色。同时,将叠加在红色上的绿线分开。 可以得出结论,在画布上绘制的线条不是线性的,也不是整个区域。我认为这是不正确的行为。
现场演示:jsfiddle.net/dom1n1k/xb2AY/
我不会问如何解决它:)问题是意识形态:你如何看待这种行为?
P.S。抱歉我的英语不好。
答案 0 :(得分:1)
好问题!规范作者(和我)认为答案是:
让我们探讨一下这个原因。
绘制红色路径时,不会绘制单独的线条。您正在绘制整个路径,并且一次绘制整个路径并一次描边,并且路径的颜色不能“重叠”自身。这是由规范有意定义的。它reads:
由于子路径都被描边为一个,因此一次描边操作中路径的重叠部分被视为它们的联合是被绘制的。
如果你想获得叠加效果,你可以简单地使用多个路径,就像添加绿线一样。因此,您可以在必要时以其他方式轻松完成。
你应该认为这个特性是一件好事:如果Canvas规范要求路径的每个子路径引起一个额外的叠加,那么每个路径的角落(每条线都被连接起来)看起来会很糟糕! (请参阅红色连接here以获取每个角落的示例)
由于路径在十字架上重叠也意味着它会在每个角落重叠,因此规范决定仅在行程时使用union'd路径,这使得正常的角落保持为预期的默认值(我想大多数人都会希望他们看起来像他们一样,而不是像我所展示的那样。如果线条覆盖在交叉点而不是每个角落,那么这将不是一致的规则,这使得学习和解决更加困难。
所以我希望推理清楚。规范必须给我们三件事,通常按此顺序:最常见的预期输出(角落看起来像他们一样),一致性(如果我们覆盖在线交叉上,我们也会在角落做,所以我们不应该'这样做,并且易于理解。
良好的规范始终一致。如果某些东西是一致的,那么它就更容易学习,一旦你知道为什么会这样做,就会更容易理解。