• canvas-台球玩法


    一、思路

    1. 绘制台球案板
    2. 画球方法
    3. 加上球移动的动作(控制透明度)
    4. 鼠标点击,球开始发射,匀速(实际有摩擦力,要速度减少),碰到案板要返回,速度或者说是每次位移的距离
    5. 鼠标移动,来放置球的位置
    6. 鼠标移出,停止动作

    二、代码

    <!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>controlBall</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 running = false;
    
    
          // 绘制边框
          function drawRect() {
            ctx.beginPath();
            ctx.rect(0,0,canvas.width,canvas.height);
            ctx.strokeStyle = '#000';
            ctx.stroke();
          }
    
          var ball = {
            x: 100,
            y: 100,
            vx: 5,
            vy: 1,
            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 clear() {
            ctx.fillStyle = 'rgba(255,255,255,0.3)';
            ctx.fillRect(0,0,canvas.width,canvas.height);
          }
    
          function draw() {
            clear();
            drawRect();
            ball.x += ball.vx;
            ball.y += ball.vy;
    
            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();
    
            raf = window.requestAnimationFrame(draw);
          }
    
          canvas.addEventListener('mousemove', function(e){
            if (!running) {
              clear();
              drawRect();
              ball.x = e.clientX;
              ball.y = e.clientY;
              ball.draw();
            }
          });
    
          canvas.addEventListener('click',function(e){
            if (!running) {
              raf = window.requestAnimationFrame(draw);
              running = true;
            }
          });
    
          canvas.addEventListener('mouseout', function(e){
            window.cancelAnimationFrame(raf);
            running = false;
          });
    
          ball.draw();
          drawRect();
        </script>
    </body>
    </html>
    
  • 相关阅读:
    Java提高班(五)深入理解BIO、NIO、AIO
    Java提高班(四)面试必备—你不知道的数据集合
    Spring Boot 系列总目录
    Java提高班(三)并发中的线程同步与锁
    Java提高班(二)深入理解线程池ThreadPool
    Spring Boot(十四)RabbitMQ延迟队列
    Spring Boot(十三)RabbitMQ安装与集成
    Spring Boot(十二)单元测试JUnit
    Spring Boot(十一)Redis集成从Docker安装到分布式Session共享
    VS2013中Python学习笔记[环境搭建]
  • 原文地址:https://www.cnblogs.com/it-cuiyi/p/10978665.html
Copyright © 2020-2023  润新知