js小球碰撞游戏,碰到下方移动木板反弹

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <style>
    .p1{
        position: absolute;
      border-radius: 50%;
      border: sienna 1px solid;
      background-color: sienna;
      width: 50px;
      height: 50px;
        left: 200px;
        top: 200px;
    }
    .p2{
        position: absolute;
        border: sienna 3px solid;
        width: 150px;
        height:3px;
        left: 0px;
        top: 480px;
    }
    .div1{
        border: greenyellow 1px solid;
        width: 500px;
        height: 500px;
        position: relative;
        left: 300px;
        top: 0px;
    }
  </style>
</head>
<body>

<button onclick="f1()">开始移动</button> <!--移动按钮,绑定小球运动事件-->
<div class="div1">
    <p class="p1" id="p1"> </p> <!--运动的小球-->
    <p class="p2" id="p2"></p> <!--移动的木板-->
</div>

<script>
    var x=0;
    var y=0;
    var X=0;
    var Y=480;
    var arr=[1,2,0.5,4,2.5,0.25,0.25,0.5,1,2,4]     //定义数组,通过随机的索引决定小球x轴,y轴单位时间内移动的距离

    let du1 = document.getElementById("p1"); //获取对象
    let du2=document.getElementById("p2");  //获取对象
    var interval
  onkeydown=function (e){  //键盘值事件,通过该方法获取操作者键盘移动的数值
      key0=e.keyCode;
      if(key0==37&&X>0){
          X-=35;
      }
      if(key0==39&&X<350){
          X+=35;
      }
      du2.style.left=X+"px"
  }
  function f1() {
      let r1=arr[Math.floor(Math.random()*10)] //获取随机索引
      let r2=arr[Math.floor(Math.random()*10)] //获取随机索引

      // x=500+r;
      // y=500+r;
      x=200 ;
      y=200 ;
       interval = setInterval(() => {  //小球动画效果,计时器单位时间内方法内代码执行的次数

          if(x>=450||x<=0){ //碰壁x轴则小球移动方法 反向
              r2=-r2
          }
              if(y<=0){   //碰壁y轴则小球移动方法 反向
                  r1=-r1
              }
              if(y>=430){  //决定小球是否碰到木板之后的处理
                  if (X>=x-125&&X<=x){ //碰到则反向 ,通过计算得出木板和小球接触的必要条件
                      r1=-r1
                  }else {
                      return  //没碰到则return,让计时器方法不执行
                  }

              }


              x=x+r2
              y=y+r1
              du1.style.left=x+"px"

              du1.style.top=y+"px"
      }, 10);
  }

</script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值