ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

canvas-自由落体球

2019-06-05 11:39:29  阅读:304  来源: 互联网

标签:canvas ball 自由落体 ctx draw vx vy


一、思路

  1. 有一个不停画球的方法
  2. 鼠标移入的时候球开始画,这个时候速度不断变化,当去了边界的时候速度变反
  3. 鼠标移走停止画图

二、代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>ball</title>
</head>
<body>
    <canvas id="canvas" width="600" height="300"></canvas>

    <script>
      var canvas = document.getElementById('canvas');
      var ctx = canvas.getContext('2d');
      var raf;

      var ball = {
        x: 100,
        y: 100,
        vx: 5,
        vy: 2,
        radius: 25,
        color: 'blue',
        draw: function() {
          ctx.beginPath();
          ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
          ctx.closePath();
          ctx.fillStyle = this.color;
          ctx.fill();
        }
      };

      function draw() {
        // 清楚画布上图形
        // ctx.clearRect(0,0, canvas.width, canvas.height);
        // 不清楚 半透明
        ctx.fillStyle = 'rgba(255,255,255,0.3)';
        ctx.fillRect(0,0,canvas.width,canvas.height);
        if (ball.y + ball.vy > canvas.height || ball.y + ball.vy < 0) {
          ball.vy = -ball.vy;
        }
        if (ball.x + ball.vx > canvas.width || ball.x + ball.vx < 0) {
          ball.vx = -ball.vx;
        }
        ball.draw();
        ball.x += ball.vx;
        ball.y += ball.vy;
        ball.vy *= .99;
        ball.vy += .25;
        raf = window.requestAnimationFrame(draw);
      }

      canvas.addEventListener('mouseover', function(e){
        raf = window.requestAnimationFrame(draw);
      });

      canvas.addEventListener('mouseout', function(e){
        window.cancelAnimationFrame(raf);
      });

      ball.draw();

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

 

标签:canvas,ball,自由落体,ctx,draw,vx,vy
来源: https://www.cnblogs.com/it-cuiyi/p/10978650.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有