首页 > 分享 > 躁动小球

躁动小球

躁动小球--鼠标圆形绘制

最新推荐文章于 2022-02-16 14:08:47 发布

置顶 HeiShanLaoYao889 于 2017-01-14 20:57:38 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>躁动的小球</title>

<style media="screen">

*{

margin: 0px;

padding: 0px;

}

#canvas{

box-shadow: 0px 0px 10px black;

display: block;

margin: 50px auto;

background: black;

}

</style>

</head>

<body>

<canvas id="canvas" width="800" height="800"></canvas>

</body>

<script type="text/javascript">

var canvas = document.getElementById("canvas");

var ctx = canvas.getContext("2d");

//随机函数

function randomSize(min,max){

return Math.floor(Math.random()*(max -min)+min);

}

// function randomColor(){

// var r = randomSize(0,255);

// var g = randomSize(0,255);

// var b = randomSize(0,255);

// return "rgb(" + r +"," + g + "," + b +")";

// }

//创建小球对象

function Ball(){

var speedX,speedY;

//速度

speedX = randomSize(1,3);

speedY = randomSize(1,3);

//半径

this.r = randomSize(5,8);

//圆心

this.x = randomSize(this.r,canvas.width-this.r);

this.y = randomSize(this.r,canvas.height -this.r);

//方向

this.speedX = randomSize(1,3) == 1 ? speedX : -speedX;

this.speedY = randomSize(1,3) == 1 ? speedY : -speedY;

//颜色

this.color = "green";

}

//定义方法绘制小球

Ball.prototype.draw = function(){

ctx.beginPath();

ctx.arc(this.x,this.y,this.r,0,360);

ctx.closePath();

ctx.fillStyle = this.color;

ctx.fill();

}

//定义方法完成小球的移动

Ball.prototype.move = function (){

//改变中心的的x,y

this.x+=this.speedX;

this.y +=this.speedY;

//进行边界判断

if (this.x >=canvas.width-this.r) {

this.speedX *=-1;

} else if (this.x <=this.r) {

this.speedX *=-1;

}

if (this.y >=canvas.height-this.r) {

this.speedY *=-1;

} else if (this.y <=this.r) {

this.speedY *=-1;

}

}

//生成小球对象

var balls = [];

for (var i = 0; i < 500; i++) {

var ball = new Ball();

balls.push(ball);

}

//定义以鼠标点为圆心的圆

//球形两两碰撞检测

function ArcCollision(e1,e2){

var lx = e1.x -e2.x;

var ly = e1.y -e2.y;

//球心距

var dis = Math.sqrt(Math.pow(lx,2)+Math.pow(ly,2));

//如果两个圆心距dis<50 就返回true

if (dis <= 50 ) {

return true;

}else {

return false;

}

}

//定义一个空数组存储当前满足条件的点

var circle = [];

//定义一个圆规定小球在此范围(以鼠标为中心的圆)内方可连线

var rs =150;

//画圆检测函数

function drawCircle(){

//每次调用之前清空数组;

circle = [];

for (var i = 0; i < balls.length; i++) {

var lx = balls[i].x -mousePoint.x;

var ly = balls[i].y -mousePoint.y;

//球心距

var dis = Math.sqrt(Math.pow(lx,2)+Math.pow(ly,2));

//如果两个圆心距dis<rs 就把该点放到数组中

if (dis <= rs ) {

circle.push(balls[i])

}

}

}

//检测划线函数

function collisionLine(balls){

for (var i = 0; i < balls.length; i++) {

for (var j = i+1; j < balls.length; j++) {

//进行距离检测

var result = ArcCollision(balls[i],balls[j]);

if (result) {

//画线函数

drawLine(balls[i],balls[j]);

}

}

}

};

//画线函数

function drawLine(startPoint,endPoint){

ctx.beginPath();

ctx.moveTo(startPoint.x,startPoint.y);

ctx.lineTo(endPoint.x,endPoint.y);

ctx.closePath();

ctx.strokeStyle = "white";

ctx.lineWidth = 1;

ctx.stroke();

}

//创建鼠标点的对象

function Point(x,y){

this.x = x;

this.y = y;

}

//创建鼠标的点对象 初始化

var mousePoint = new Point(canvas.width/2,canvas.height/2);

//事件处理函数

canvas.onmousemove = function(e){

var even = e || event;

mousePoint.x = even.clientX - canvas.offsetLeft;

mousePoint.y = even.clientY - canvas.offsetTop;

}

canvas.onmouseleave = function(){

mousePoint.x =canvas.width/2;

mousePoint.y =canvas.height/2;

}

//让小球躁动起来

function animation(){

//每次动起来之前,清除画布

ctx.clearRect(0,0,canvas.width,canvas.height);

//遍历小球数组,让每一个小球动起来

for (var i = 0; i < balls.length; i++) {

balls[i].move();

balls[i].draw();

};

drawCircle();

collisionLine(circle);

window.requestAnimationFrame(animation);

//调用检测画线函数

}

animation();

</script>

</html>

相关知识

小球玫瑰怎么繁殖
小球玫瑰怎么浇水
小球玫瑰的养护方法
带刺的小球草本植物
小球玫瑰多肉怎么养
绯花玉怎么繁殖小球
小球玫瑰怎么养爆盆
仙人球只长小球不开花?学会促花“窍门”,小球不长,疯狂出花苞
多肉植物小球玫瑰?3个养花小技巧,小球玫瑰茎长又饱满
小球玫瑰的养殖方法和注意事项

网址: 躁动小球 https://m.huajiangbk.com/newsview1100084.html

所属分类:花卉
上一篇: 馒头热量
下一篇: 德国爱他美PRE段、1段、澳洲爱