所有html画布形状都被赋予最后添加的对象的颜色

gai*_*ndo 3 html5 canvas

我试图做一个奥林匹克式的旗帜,纯粹是为了学习如何用JavaScript绘制.这应该绘制两个圆圈 - 一个蓝色,一个黑色......这是代码(我为此道歉,一直在两个函数之间移动 - 不确定如何非显式地引用上下文):

function drawCircle(ctx,x,y,radius, color){
  var startAngle = 0;
  var endAngle = (Math.PI*2);
  var clockwise = true;
  ctx.fillStyle = color;
  ctx.arc(x,y,radius,startAngle,endAngle, clockwise);
  ctx.fill();
  ctx.closePath;
}
function drawCircles(){
    var canvas = document.getElementById('myCanvasArea');  
    var ctx = canvas.getContext('2d'); 
     if (canvas.getContext){    
        drawCircle(ctx,50,25,25, 'blue');
        drawCircle(ctx,100,25,25, 'black');
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到两个黑圈.我认为我没有区分这两种形状,因此第二种的属性应用于第一种.

我该如何区分?我想点击每个人提出一个动作.我从一开始就错了吗?

Sim*_*ris 5

这是因为你永远不会打电话beginPath()!

function drawCircle(ctx,x,y,radius, color){
  var startAngle = 0;
  var endAngle = (Math.PI*2);
  var clockwise = true;
  ctx.fillStyle = color;
  ctx.beginPath(); // <-- Need me!!
  ctx.arc(x,y,radius,startAngle,endAngle, clockwise);
  ctx.fill();
  ctx.closePath;
}
Run Code Online (Sandbox Code Playgroud)

由于你没有调用beginPath,你正在绘制一个蓝色圆圈,然后你继续一个现在有两个圆圈(旧的和新的圆圈)的路径,并将该路径(以及两个圆圈)绘制为黑色!

相反,你想绘制一个蓝色圆圈,填充蓝色,开始一个新的路径,并绘制一个黑色.

实时代码:

http://jsfiddle.net/5PDUb/1/