【问题标题】:html5 - Canvas - Createjs - negative space in graphics drawinghtml5 - Canvas - Createjs - 图形绘制中的负空间
【发布时间】:2016-12-16 17:39:36
【问题描述】:

我有一个复杂的情况,我需要使用 lineTo() 和 drawCircle() 方法绘制一个形状,但是根据我绘制线条的方向会产生负空间行为。

//draw from right to left   
var shape2 = new createjs.Shape();
    shape2.graphics.beginFill('blue').moveTo(300,200).lineTo(0,200).lineTo(0,300).lineTo(300,300).closePath();
    shape2.graphics.drawCircle(280,250,100)

看看这个 JsFiddle :) https://jsfiddle.net/zOgs/3epv7o54/

有人可以向我解释为什么蓝色圆圈会产生负空间..吗?以及如何避免这种行为...

(我试图改变形状实例的compositeOperation参数,但它似乎没有效果......)

谢谢!

编辑 1:

我为我的工作案例做了一个更准确的例子。请查看这个 JsFiddle 并在画布上移动鼠标。你会看到从右到左没有任何问题......但是从左到右出现负空格! (快速移动以获得更好的视野)

https://jsfiddle.net/zOgs/psa3x9y2/

我不明白为什么,我找不到任何有效的解决方法... (由于性能原因无法进行缓存,由于后台问题无法进行 composeOperation)

【问题讨论】:

    标签: javascript html canvas createjs


    【解决方案1】:

    EDIT 1(删除之前提出的两个解决方法)

    我想我找到了解决方案:在绘制圆圈之前再次设置填充似乎可以解决这个问题。

    就您的示例而言,这意味着将上面摘录的最后一行修改为shape2.graphics.beginFill('blue').drawCircle(280,250,100);

    编辑 2

    针对您的评论和更新的 jsfiddle,您还可以尝试在您的 Shape() 实例化之后立即设置 shape3.compositeOperation = "xor";

    更新小提琴:https://jsfiddle.net/93gv1e06/

    【讨论】:

    • 谢谢,但我的工作案例要复杂得多。我需要使用 lineTo() 并且我不知道我将绘制哪一面,所以我需要一个适用于双方的解决方案!
    • 是的,你是对的,我之前测试过这个解决方案 :) 但我还有另一个限制!我必须为形状设置一个 alpha...使用该解决方案,rect 和 circle 将不再具有相同的 alpha 值...相当复杂的情况哈;)
    • 啊,是的,我明白了你的问题,这确实是一个相当复杂的情况:)
    • 在绘制形状之前您是否尝试过shape3.compositeOperation = "xor";?小提琴:jsfiddle.net/93gv1e06
    • 哼...我不能让它与我的工作示例一起工作......让我稍后再回来。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-08-28
    • 2014-10-03
    • 2018-07-16
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多