如何在 javascript canvas 中绘制并将其与形状进行比较?

2024-03-23

因此,为了简短起见,我想知道如何能够跟踪用户从点击到松开的绘图,并将其与完美的圆形进行比较以检查其准确性?

这可能吗?如果可能的话,与完美圆相比,检查其准确性的最佳方法是什么?如何?

还想一下,如果用户画了一个圆,但起点和终点不完全重合,也许画一条线来连接它们,等等?


不久前我做了一个“留在文本中”的游戏。你所要做的就是追踪号码。追踪时您留在线内的时间越多,您的分数就越高。

欢迎您以此开始并根据需要进行修改。 :-)

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var $canvas=$("#canvas");
var canvasOffset=$canvas.offset();
var offsetX=canvasOffset.left;
var offsetY=canvasOffset.top;
var scrollX=$canvas.scrollLeft();
var scrollY=$canvas.scrollTop();


ctx.font="216px arial";
ctx.fillStyle="white";
ctx.fillText("2",100,200);
ctx.strokeText("2",100,200);

var cw=canvas.width;
var ch=canvas.height;
var imgData=ctx.getImageData(0,0,cw,ch);
var data=imgData.data;

var isDown=false;
var wasInside=true;
var score=0;

function draw(mouseX,mouseY){

  var alpha = data[((cw*mouseY)+mouseX)*4+3];

  score+=(alpha>19?1:-1);

  if(alpha<20 && wasInside){
    wasInside=false;
    ctx.fillStyle="white";
    ctx.fillRect(0,0,cw,ch);
    ctx.fillStyle="white";
    ctx.fillText("2",100,200);
    ctx.strokeText("2",100,200);
  }else if(alpha>19 && !wasInside){
    wasInside=true;
    ctx.fillStyle="white";
    ctx.fillRect(0,0,cw,ch);
    ctx.fillStyle="green";
    ctx.fillText("2",100,200);
    ctx.strokeText("2",100,200);
  }

}

function handleMouseDown(e){
  e.preventDefault();
  mouseX=parseInt(e.clientX-offsetX);
  mouseY=parseInt(e.clientY-offsetY);
  var alpha = data[((cw*mouseY)+mouseX)*4+3];
  wasInside=(alpha<20);
  score=0;
  isDown=true;
  draw(mouseX,mouseY);
}

function handleMouseUp(e){
  e.preventDefault();
  isDown=false;
  $("#score").text("Score: "+score);
}

function handleMouseOut(e){
  e.preventDefault();
  isDown=false;
}

function handleMouseMove(e){
  if(!isDown){return;}
  e.preventDefault();
  mouseX=parseInt(e.clientX-offsetX);
  mouseY=parseInt(e.clientY-offsetY);
  draw(mouseX,mouseY);
}

$("#canvas").mousedown(function(e){handleMouseDown(e);});
$("#canvas").mousemove(function(e){handleMouseMove(e);});
$("#canvas").mouseup(function(e){handleMouseUp(e);});
$("#canvas").mouseout(function(e){handleMouseOut(e);});

$(window).scroll(function(){
    var BB=canvas.getBoundingClientRect();
    offsetX=BB.left;
    offsetY=BB.top;
});
body{ background-color: white; }
#canvas{border:1px solid red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h4>Drag inside the number<br>Number stays green while you're inside.</h4>
<h3 id="score">Score:</h3>
<canvas id="canvas" width=300 height=300></canvas>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 javascript canvas 中绘制并将其与形状进行比较? 的相关文章

随机推荐