canvas圆与点的碰撞检测

<!DOCTYPE html>
<head>
<title>text</title>
<style>
html,body{ margin:0; padding:0;}
</style>
</head>
<body>
<canvas id="mycircle" width="400" height="300" style="border:1px solid #333; position:absolute; left:0; top:0;"></canvas>
<script type="text/javascript">
var Circle = function(){
this.x = 0;
this.y = 0;
this.radius = 50;
this.z = 0;
this.vx = 5;
this.vy = 5;
this.color = '#000000';
}
Circle.prototype.hitTestPoint = function(point){
return (point.x-this.x)*(point.x-this.x) + (point.y-this.y)*(point.y-this.y) < this.radius *this.radius;
}
var mouse = {x:-1000,y:-1000};
var circle = new Circle();
var ctx = document.getElementById("mycircle").getContext("2d");
function loop(){
circle.x += circle.vx;
circle.y += circle.vy;
if(circle.x>ctx.canvas.width-circle.radius){
circle.x = ctx.canvas.width-circle.radius
circle.vx *= -1;
}
if(circle.x<circle.radius){
circle.x = circle.radius;
circle.vx *= -1;
}
if(circle.y>ctx.canvas.height-circle.radius){
circle.y = ctx.canvas.height-circle.radius
circle.vy *= -1;
}
if(circle.y<circle.radius){
circle.y = circle.radius;
circle.vy *= -1;
}
circle.color = circle.hitTestPoint(mouse)?'#ff0000':'#000000';
ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height);
ctx.fillStyle = circle.color;
ctx.beginPath();
ctx.arc(circle.x,circle.y,circle.radius,0,Math.PI*2,false);
ctx.fill();
}
setInterval(loop,23);
ctx.canvas.onmousemove = function(e){
mouse.x = e.clientX;
mouse.y = e.clientY;
};
ctx.canvas.onmouseout = function(){
mouse.x = -1000;
mouse.y = -1000;
}
</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值