用canvas和js模拟重力小球

17 篇文章 0 订阅
1 篇文章 0 订阅
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			html,body{
				margin: 0;
			}
			canvas{
				background: ;
			}
		</style>
	</head>
	<body>
		<canvas id="mycanvas" width="" height=""></canvas>
	</body>
	<script type="text/javascript">
	
		canvas=document.querySelector("#mycanvas")
		body=document.querySelector("body")
		ctx=canvas.getContext("2d")
		var gravity=0.8
		var friction=0.9
		window.addEventListener("resize",function(event){
			canvas.width=window.innerWidth
		    canvas.height=window.innerHeight
		})
		
		canvas.width=window.innerWidth
		canvas.height=window.innerHeight
		function Ball(x,y,dx,dy,radius,color){
			this.x=x
			this.y=y
			this.dx=dx
			this.dy=dy
			this.radius=radius
			this.color=color
			
			this.draw=function(){
				ctx.beginPath()
				ctx.arc(this.x,this.y,this.radius,0,Math.PI*2)
				ctx.fillStyle=this.color
				ctx.fill()
			}
			
			this.update=function(){ 
				if(this.y+this.radius+this.dy+gravity>canvas.height){
					this.dy=-this.dy
					this.dy*=friction
					this.dx*=friction
				}else{
					this.dy+=gravity
				}
				if(this.x+this.radius>canvas.width || this.x-this.radius<0)
				{
					this.dx=-this.dx
					this.dy*=friction
					this.dx*=friction
				}
				this.x+=this.dx
				this.y+=this.dy
				this.draw()
			}
		}
		
		var shot=Math.random()*40-20
		
		var ball=new Ball(100,100,shot,10,50,"skyblue")
		function animate(){
			ctx.clearRect(0,0,window.innerWidth,window.innerHeight)
			ball.update()
			requestAnimationFrame(animate)

		}
		
		animate()
	</script>
</html>

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codingWeb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值