烟花动画

JavaScript写网页烟花

首先网页框架

<html>
<head>
  <meta charset="UTF-8">
  <script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/p5.min.js"></script>
  <script language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/addons/p5.dom.min.js"></script>
  <script language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/addons/p5.sound.min.js"></script>
  <script language="javascript" type="text/javascript" src="particle.js"></script>
  <script language="javascript" type="text/javascript" src="firework.js"></script>
  <script language="javascript" type="text/javascript" src="sketch.js"></script>
</head>
<body>
</body>
</html>

JavaScript功能代码

本文代码块数值全部打码了。嘻嘻嘻

第一部分主函数firework

function Firework() {
    
    
  this.hu = random(*);
  this.firework = new Particle(random(width), height, this.hu, true);
  this.exploded = false;
  this.particles = [];

  this.done = function() {
    
    
    if (this.exploded && this.particles.length === *) {
    
    
      return true;
    } else {
    
    
      return false;
    }
  }

  this.update = function() {
    
    
    if (!this.exploded) {
    
    
      this.firework.applyForce(gravity);
      this.firework.update();
      
      if (this.firework.vel.y >= *) {
    
    
        this.exploded = true;
        this.explode();
      }
    }
    
    for (var i = this.particles.length - *; i >= *; i--) {
    
    
      this.particles[i].applyForce(gravity);
      this.particles[i].update();
      
      if (this.particles[i].done()) {
    
    
        this.particles.splice(i, *);
      }
    }
  }

  this.explode = function() {
    
    
    for (var i = *; i < *; i++) {
    
    
      var p = new Particle(this.firework.pos.x, this.firework.pos.y, this.hu, false);
      this.particles.push(p);
    }
  }

  this.show = function() {
    
    
    if (!this.exploded) {
    
    
      this.firework.show();
    }
    
    for (var i = *; i < this.particles.length; i++) {
    
    
      this.particles[i].show();
    }
  }
}

第二部分便是关于烟花粒子的动画效果和绘画

先降粒子画出来
var fireworks = [];
var gravity;

function setup() {
    
    
  createCanvas(*, *);
  colorMode(HSB);
  gravity = createVector(*, *);
  stroke(255);
  strokeWeight(4);
  background(0);
}

function draw() {
    
    
  colorMode(RGB);
  background(*, *, *, *);
  
  if (random(*) < *) {
    
    
    fireworks.push(new Firework());
  }
  
  for (var i = fireworks.length -*; i >= *; i--) {
    
    
    fireworks[i].update();
    fireworks[i].show();
    
    if (fireworks[i].done()) {
    
    
      fireworks.splice(i, *);
    }
  }
}

最后便是动画效果的描绘
function Particle(x, y, hu, firework) {
    
    
  this.pos = createVector(x, y);
  this.firework = firework;
  this.lifespan = *;
  this.hu = hu;
  this.acc = createVector(*, *);
  
  if (this.firework) {
    
    
    this.vel = createVector(0, random(*, *));
  } else {
    
    
    this.vel = p5.Vector.random2D();
    this.vel.mult(random(*, *));
  }
 
  this.applyForce = function(force) {
    
    
    this.acc.add(force);
  }

  this.update = function() {
    
    
    if (!this.firework) {
    
    
      this.vel.mult(*);
      this.lifespan -= *;
    }
    
    this.vel.add(this.acc);
    this.pos.add(this.vel);
    this.acc.mult(*);
  }

  this.done = function() {
    
    
    if (this.lifespan < *) {
    
    
      return true;
    } else {
    
    
      return false;
    }
  }

  this.show = function() {
    
    
    colorMode(HSB);
    
    if (!this.firework) {
    
    
      strokeWeight(*);
      stroke(hu, *, *, this.lifespan);
    } else {
    
    
      strokeWeight(*);
      stroke(hu, *, *);
    }
    
    point(this.pos.x, this.pos.y);
  }
}

最后展示一下效果

在这里插入图片描述

感觉还是可以的

嘻嘻

猜你喜欢

转载自blog.csdn.net/qq_41606378/article/details/99113922