zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    requestAnimationFrame & canvas

    https://codepen.io/xgqfrms/pen/jOEPjLJ

    // setup canvas
    
    var canvas = document.querySelector('canvas');
    var ctx = canvas.getContext('2d');
    
    var width = canvas.width = window.innerWidth;
    var height = canvas.height = window.innerHeight;
    
    // function to generate random number
    
    function random(min,max) {
      var num = Math.floor(Math.random()*(max-min)) + min;
      return num;
    }
    
    // define Ball constructor
    
    function Ball(x, y, velX, velY, color, size) {
      this.x = x;
      this.y = y;
      this.velX = velX;
      this.velY = velY;
      this.color = color;
      this.size = size;
    }
    
    // define ball draw method
    
    Ball.prototype.draw = function() {
      ctx.beginPath();
      ctx.fillStyle = this.color;
      ctx.arc(this.x, this.y, this.size, 0, 2 * Math.PI);
      ctx.fill();
    };
    
    // define ball update method
    
    Ball.prototype.update = function() {
      if((this.x + this.size) >= width) {
        this.velX = -(this.velX);
      }
    
      if((this.x - this.size) <= 0) {
        this.velX = -(this.velX);
      }
    
      if((this.y + this.size) >= height) {
        this.velY = -(this.velY);
      }
    
      if((this.y - this.size) <= 0) {
        this.velY = -(this.velY);
      }
    
      this.x += this.velX;
      this.y += this.velY;
    };
    
    // define ball collision detection
    
    Ball.prototype.collisionDetect = function() {
      for(var j = 0; j < balls.length; j++) {
        if(!(this === balls[j])) {
          var dx = this.x - balls[j].x;
          var dy = this.y - balls[j].y;
          var distance = Math.sqrt(dx * dx + dy * dy);
    
          if (distance < this.size + balls[j].size) {
            balls[j].color = this.color = 'rgb(' + random(0,255) + ',' + random(0,255) + ',' + random(0,255) +')';
          }
        }
      }
    };
    
    // define array to store balls
    
    var balls = [];
    
    // define loop that keeps drawing the scene constantly
    
    function loop() {
      ctx.fillStyle = 'rgba(0,0,0,0.25)';
      ctx.fillRect(0,0,width,height);
    
      while(balls.length < 25) {
        var ball = new Ball(
          random(0,width),
          random(0,height),
          random(-7,7),
          random(-7,7),
          'rgb(' + random(0,255) + ',' + random(0,255) + ',' + random(0,255) +')',
          random(10,20)
        );
        balls.push(ball);
      }
    
      for(var i = 0; i < balls.length; i++) {
        balls[i].draw();
        balls[i].update();
        balls[i].collisionDetect();
      }
    
      requestAnimationFrame(loop);
    }
    
    
    
    loop();
    
    
    

    ©xgqfrms 2012-2020

    www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    面试题1:赋值运算符函数
    面试题:寻找热门查询
    面试题9:斐波那契数列
    Java中的volatile关键字
    二分查找算法
    面试题8:旋转数组的最小数字
    面试题:在O(1)空间复杂度范围内对一个数组中前后连段有序数组进行归并排序
    百度面试题:从海量日志中提取访问百度次数最多的IP
    面试总结
    java垃圾回收
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/11995088.html
Copyright © 2011-2022 走看看