Javascript画布填充相交的形状

时间:2014-02-05 17:54:29

标签: javascript html5 canvas

我有这些函数来绘制正多边形或由点阵列定义的任何形状。

function polygon(ctx, x, y, radius, sides, startAngle, anticlockwise) {
    if (sides < 3) return;
    var a = (Math.PI * 2)/sides;
    a = anticlockwise?-a:a;
    ctx.save();
    ctx.translate(x,y);
    ctx.rotate(startAngle);
    ctx.moveTo(radius, 0);
    for (var i = 1; i < sides; i++) {
        ctx.lineTo(radius*Math.cos(a*i), radius*Math.sin(a*i));
    }
    ctx.closePath();
    ctx.restore();
}

function plotpolygon(radius, sides, color) {
    var context = document.getElementById("logo-canvas").getContext('2d');
    context.beginPath();
    polygon(context, 256, 256, radius, sides, -Math.PI/2);
    context.fillStyle = color;
    context.fill();
    context.stroke();
}

function plotshape(xpoints, ypoints, color) {
    var context = document.getElementById("logo-canvas").getContext('2d');
    context.beginPath;
    context.moveTo(xpoints[0], ypoints[0]);
    for (var i=1; i < xpoints.length; i++) {
            context.lineTo(xpoints[i], ypoints[i]);
    }
    context.closePath();
    context.fillStyle = color;
    context.fill();
    context.stroke();
}

多边形和形状很好,问题是填充颜色。 如果我按以下顺序打电话:

plotpolygon(94, 3, 'yellow');
plotshape(xpoints, ypoints, 'brown');

结果应为黄色三角形,棕色形状与其部分重叠。 但是,我得到了形状重叠的地方 - 黄色,不重叠的地方 - 棕色。 我按mozilla的建议尝试过构图,但没有帮助。

对我来说更奇怪的是,我在画布上有更多的多边形,总是把它们放在最上面 - 大多数是重叠的,但它们有自己的颜色。当我添加一个形状时,问题就开始发生了。

1 个答案:

答案 0 :(得分:1)

你有一个拼写错误导致第一个三角形绘图样式在图表中继续。

修复:plotshape内的beginPath必须有括号:

ctx.beginPath();

稍微重构的演示:http://jsfiddle.net/m1erickson/adHdr/