为什么我的javascript / canvas多边形不会填充?

时间:2014-08-18 22:59:39

标签: javascript canvas html5-canvas

所以我创建了一个程序,它将从本地网络服务器获取美国的坐标列表。客户端可以通过发出简单的GET请求来获取这些坐标。我试图单独填写各州,但这似乎不起作用。我填写这些的代码如下

ctx.fillStyle= "#f00";
//coords holds an array of JSON objects, which store an array of coordinates under the 'coords' tag. These coordinates are stored in an array, which holds [x,y].
for (var i=0; i<coords.length; i++){
            obj = coords[i]['coords'];
//Begin the path
            ctx.beginPath();
            for (var j=0; j<obj.length; j++){
//Draw each point on the path
                if (j!=obj.length-1){
                    ctx.moveTo(obj[j][0],obj[j][1])
                    ctx.lineTo(obj[j+1][0],obj[j+1][1])
                }
            }
//Close the path
            ctx.closePath();
            ctx.fill();
            ctx.stroke();
        }

出于某种原因,这不会填补。它用黑色轮廓绘制它们就好了,但填充不会发生。我已经在gist上提出了数据,可以在这里找到。 https://gist.github.com/ollien/44119f42187ec21ae2c8

谢谢!

1 个答案:

答案 0 :(得分:1)

每当你做一次动作,你就会突破&#39;曲线。我建议你首先只使用moveTo,然后只使用lineTo:

ctx.fillStyle= "#f00";
//coords holds an array of JSON objects, which store an array of coordinates under the 'coords' tag. These coordinates are stored in an array, which holds [x,y].
for (var i=0; i<coords.length; i++){
     obj = coords[i]['coords'];
     drawObj(obj);
}

将drawObj定义为:

function drawObj(obj) {
         if (obj.length<2) return;
         ctx.beginPath();
         var currObj = obj[0];
         ctx.moveTo(currObj[0], currObj[1]);
         for (var j=1; j<obj.length; j++){
             currObj = =obj[j]
             ctx.lineTo(currObj[0],currObj[1])
         }
         ctx.closePath();
         ctx.fill();
         ctx.stroke();
}