zoukankan      html  css  js  c++  java
  • canvas_05 面向对象的小球

    效果图:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4     <head>
     5         <meta charset="UTF-8">
     6         <meta http-equiv="X-UA-Compatible" content="IE=edge">
     7         <meta name="viewport" content="width=device-width, initial-scale=1.0">
     8         <title>Canvas</title>
     9         <style>
    10             canvas {
    11                 margin: 0 auto;
    12                 border: 1px solid #aaa;
    13                 display: block;
    14             }
    15         </style>
    16     </head>
    17 
    18     <body>
    19         <canvas width="500px" height="500px" id="canvas"></canvas>
    20 
    21         <script>
    22             var canvas = document.querySelector("#canvas");
    23             var ctx = canvas.getContext("2d");
    24 
    25             var w = canvas.width;
    26             var h = canvas.height;
    27 
    28             function randNum(num) {
    29                 return Math.random() * num;
    30             }
    31 
    32             /**
    33              *  x        起始x坐标
    34              *  y        起始y坐标
    35              * color     小球颜色
    36              * xSpeed    x轴速度
    37              * ySpeed    y轴速度
    38              */
    39 
    40             // 初始化小球坐标
    41             function Ball() {
    42                 this.x = randNum(5) + 60; // 60 防止卡住
    43                 this.y = randNum(3) + 60;
    44                 this.r = randNum(50) + 10; // [10, 60)
    45                 this.xSpeed = randNum(3) + 2; // [2, 5)
    46                 this.ySpeed = randNum(3) + 1; // [1, 4)
    47                 this.color = "#" + parseInt(Math.random() * 0xffffff).toString(16);
    48             }
    49 
    50             // 定义小球显示方法
    51             Ball.prototype.show = function() {
    52                 // 更新球坐标
    53                 this.run();
    54 
    55                 ctx.beginPath();
    56                 ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2);
    57                 ctx.fillStyle = this.color;
    58                 ctx.fill();
    59             }
    60 
    61             // 小球运动
    62             Ball.prototype.run = function() {
    63                 if (this.x + this.r >= w || this.x - this.r <= 0) {
    64                     this.xSpeed = -this.xSpeed
    65                 }
    66 
    67                 if (this.y + this.r >= h || this.y - this.r <= 0) {
    68                     this.ySpeed = -this.ySpeed
    69                 }
    70 
    71                 this.x += this.xSpeed;
    72                 this.y += this.ySpeed;
    73 
    74             }
    75 
    76             function animation() {
    77                 var ballArr = [];
    78                 for (var i = 0; i < 50; i++) {
    79                     var ball = new Ball();
    80                     ballArr.push(ball);
    81                     ball.show();
    82                 }
    83 
    84                 setInterval(() => {
    85                     ctx.clearRect(0, 0, w, h);
    86                     for (var i = 0; i < ballArr.length; i++) {
    87                         var ball = ballArr[i];
    88                         ball.show();
    89                     }
    90                 }, 10)
    91             }
    92 
    93             animation();
    94         </script>
    95     </body>
    96 
    97 </html>
  • 相关阅读:
    Allow Zero Length 允许空字符串 ACCESS
    数据集永久字段的Visble 属性为何不起作用
    Microsoft Jet 数据库引擎 SQL 和 ANSI SQL 的比较
    Microsoft 数据访问组件 (MDAC) 的版本历史记录
    Windows 7 英文版操作系统中文软件乱码解决方法
    DBLookupComboBox 的初始值
    无法为更新定位行,一些值可能已在最后一次读取后已更改
    [hdu6428]Problem C. Calculate
    [hdu6437]Problem L. Videos
    [hdu6434]Problem I. Count
  • 原文地址:https://www.cnblogs.com/luwei0915/p/15734727.html
Copyright © 2011-2022 走看看