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 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    R语言实现人工神经网络预测实例
    Hive 元数据表结构详解
    距离判别法与R程序实战
    Map端数据倾斜
    cdh5.5.6的hue下用ssh方式运行sqoop
    YARN中内存的设置
    hue同时执行多个任务出现org.apache.hadoop.mapred.TaskAttemptListenerImpl
    CDH5.5.6下R、RHive、RJava、RHadoop安装测试
    [转]值得推荐的C/C++框架和库,包含很多开源项目 (真的很强大)
    GPSD
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/11995088.html
Copyright © 2011-2022 走看看