Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CanvasRenderingContext2D.fill()似乎不起作用_Javascript_Html_Canvas - Fatal编程技术网

Javascript CanvasRenderingContext2D.fill()似乎不起作用

Javascript CanvasRenderingContext2D.fill()似乎不起作用,javascript,html,canvas,Javascript,Html,Canvas,我正在HTML5画布上制作一个简单的多边形绘制方法。它将成功地勾勒出形状轮廓,但不会填充形状,即使已指示它: function PhysicsObj(Position /*Vector*/,Vertices /*Vector Array*/) { this.Position = Position this.Vertices = Vertices this.Velocity = new Vector(0,0);

我正在HTML5画布上制作一个简单的多边形绘制方法。它将成功地勾勒出形状轮廓,但不会填充形状,即使已指示它:

function PhysicsObj(Position /*Vector*/,Vertices /*Vector Array*/)
        {
            this.Position = Position
            this.Vertices = Vertices
            this.Velocity = new Vector(0,0);
            this.Colour = "rgb(100,100,100)";

            this.draw = function()
            {
                ctx.beginPath();
                for(var point=0; point<Vertices.length-1; point++)
                {
                    ctx.moveTo(Vertices[point].X+Position.X,Vertices[point].Y+Position.Y);
                    ctx.lineTo(Vertices[point+1].X+Position.X,Vertices[point+1].Y+Position.Y);
                }
                ctx.moveTo(Vertices[point].X+Position.X,Vertices[point].Y+Position.Y);
                ctx.lineTo(Vertices[0].X+Position.X,Vertices[0].Y+Position.Y);
                ctx.closePath();
                ctx.fillStyle = this.Colour;
                ctx.fill();
                ctx.strokeStyle = this.Colour;
                ctx.stroke();
            }
        }

        var Polygon = new PhysicsObj(new Vector(100,100),[new Vector(50,50),new Vector(-50,50), new Vector(0,125)]);
        Polygon.draw();
函数PhysicsObj(位置/*向量*/,顶点/*向量数组*/)
{
这个位置=位置
这个。顶点=顶点
速度=新矢量(0,0);
this.color=“rgb(100100)”;
this.draw=函数()
{
ctx.beginPath();

对于(var point=0;point消除额外的moveTo命令:

var PositionX=50;
var PositionY=50;

var Vertices=[
    {X:10,Y:10},
    {X:100,Y:10},
    {X:50,Y:50}
];

ctx.beginPath();
ctx.moveTo(Vertices[0].X+PositionX,Vertices[0].Y+PositionY);
for(var point=1; point<Vertices.length; point++)
{
    ctx.lineTo(Vertices[point].X+PositionX,Vertices[point].Y+PositionY);
}
ctx.lineTo(Vertices[0].X+PositionX,Vertices[0].Y+PositionY);
ctx.closePath();
ctx.fillStyle = "red";
ctx.fill();
ctx.strokeStyle = "black";
ctx.stroke();
var位置x=50;
变量Y=50;
变量顶点=[
{X:10,Y:10},
{X:100,Y:10},
{X:50,Y:50}
];
ctx.beginPath();
移动到(顶点[0].X+PositionX,顶点[0].Y+PositionY);

对于(var point=1;point谢谢,但为什么这样做有效,而上述操作无效?因为额外的moveTo命令正在创建多条单独的线,这些线的排列方式看起来像一个闭合的形状——但它们实际上仍然只是单独的线。单独的线是不可填充的;-)谢谢!这真的很有帮助。:)