加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
test.html 2.93 KB
一键复制 编辑 原始数据 按行查看 历史
冥冥框框 提交于 2021-06-02 18:28 . html5
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<style>
canvas{
box-shadow: 0 0 10px #999;
}
</style>
<body onload="init()">
<canvas height="300" width="400" id="canvas">
浏览器不支持
</canvas>
</body>
</html>
<script>
function init(){
var canvas = document.getElementById("canvas");
if(!canvas.getContext){
return
}
var ctxt = canvas.getContext('2d')
function Ball(x,y,r,speedX,speedY,color) {//小球对象
this.x = x;
this.y = y;
this.r = r;
this.speedX = speedX;
this.speedY = speedY;
this.color = color;
}
Ball.prototype.circle = function(){//小球
ctxt.beginPath();
ctxt.fillStyle = this.color
ctxt.arc(this.x,this.y,this.r,0,Math.PI*2)
ctxt.stroke()
ctxt.fill()
}
Ball.prototype.move = function(){//小球运动
this.x += this.speedX;
if(this.x > canvas.width-this.r){//判断是否碰到边缘,如果碰到,往回弹
this.speedX *= -1
}else if(this.x < this.r){
this.speedX *= -1
}
this.y += this.speedY;
if(this.y>canvas.height-this.r){
this.speedY *= -1
}else if(this.y<this.r){
this.speedY *= -1
}
};
var ball = new Ball(20,30,10,10,5,'red');
var ball2 = new Ball(90,30,10,8,9,'green');
ball.circle();
ball.move();
ball2.circle();
ball2.move();
function animate(){
ctxt.clearRect(0,0,canvas.width,canvas.height);
ball.circle();
ball.move();
ball2.circle();
ball2.move();
if(ballIsHit(ball,ball2)){//判断两个小球之间是否碰撞
ball.speedY *= -1;
ball.speedX *= -1;
ball2.speedX *= -1;
ball2.speedY *= -1;
}
window.requestAnimationFrame(animate)
}
animate();
function ballIsHit(ball,ball2){//小球碰撞
var minX1 = ball.x-ball.r;
var minX2 = ball2.x-ball2.r;
var minY1 = ball.y-ball.r;
var minY2 = ball2.y-ball2.r;
var maxX1 = ball.x + ball.r;
var maxX2 = ball2.x + ball2.r;
var maxY1 = ball.y + ball.r;
var maxY2 = ball2.y + ball2.r;
var minX = Math.max(minX1,minX2);
var minY = Math.max(minY1,minY2);
var maxX = Math.min(maxX1,maxX2);
var maxY = Math.min(maxY1,maxY2);
if(minX<maxX && minY < maxY){//左边的小球的右侧小于右边小球的左侧 上侧小于下侧 就发生碰撞
console.log('000');
return true
}
}
}
</script>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化