JS (canvas) 两个小球碰撞
2021-07-04 09:07
标签:idt new obj string box cti screen vda ima
style media="screen">
* {
margin: 0;
padding: 0;
}
canvas {
box-shadow: 0 0 40px black;
margin: 50px;
}
style>
canvas id="canvas" width="500" height="500">您的浏览器不支持canvascanvas>
script>
var canvas = document.querySelector(‘canvas‘);
var ctx = canvas.getContext(‘2d‘);
var canvasW = canvas.width;
var canvasH = canvas.height;
//随机数函数
function random(min,max) {
return parseInt(Math.random()*(max - min) + min);
}
//构造函数
function Ball(x, y, r, speedX, speedY) {
this.r = r || random(10, 30);
this.x = x || random(this.r, canvasW - this.r);
this.y = y || random(this.r, canvasH - this.r);
this.speedX = speedX || random(2, 5);
this.speedY = speedY || random(2, 5);
//draw方法
this.draw = function() {
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, Math.PI*2, true);
ctx.fillStyle = ‘red‘;
ctx.fill();
}
//move方法
this.move = function() {
this.x += this.speedX;
this.y += this.speedY;
if(this.x this.r || this.x > canvasW - this.r) {
this.speedX = -this.speedX;
}
if(this.y this.r || this.y > canvasH - this.r) {
this.speedY = -this.speedY;
}
this.draw();//调用draw方法
}
}
var ball1 = new Ball();
var ball2 = new Ball();
ball1.draw();
ball2.draw();
// 碰撞函数
function isCrash(obj1, obj2) {
var x = obj1.x - obj2.x;
var y = obj1.y - obj2.y;
var distance = Math.sqrt(x*x + y*y);//开方函数
if(distance //判断碰撞
obj1.speedX = -obj1.speedX;
obj1.speedY = -obj1.speedY;
obj2.speedX = -obj2.speedX;
obj2.speedY = -obj2.speedY;
}
}
var frameNum = 0;
var prevDate = new Date();
function gameloop() {
frameNum++;
ctx.clearRect(0, 0, canvasW, canvasH);
ball1.move();
ball2.move();
isCrash(ball1,ball2);
window.requestAnimationFrame(gameloop);//跟setTimeout相似,根据帧率执行
}
gameloop();
script>
JS (canvas) 两个小球碰撞
标签:idt new obj string box cti screen vda ima
原文地址:http://www.cnblogs.com/Marlboro-pm/p/7120329.html