程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

How to use Python code to achieve the most dazzling fireworks

編輯:Python

How to use it? Python Code to achieve the most dazzling fireworks

This article mainly introduces “ How to use it? Python Code to achieve the most dazzling fireworks ”, In daily operation , I believe many people are using Python There are doubts about the most dazzling fireworks in the code implementation , Xiao Bian consulted all kinds of materials , Sort out simple and easy-to-use operation methods , I hope to answer ” How to use it? Python Code to achieve the most dazzling fireworks ” Your doubts help ! Next , Please follow Xiaobian to learn !

design sketch :

Text :

Create a canvas

setup and draw yes p5.js The two main functions of , Inside createCanvas The size used to create the canvas ,background To set the background color of the canvas

function setup() {
    createCanvas(1303 / 2, 734 / 2)
}
function draw() {
    background(50);
}

Draw fireworks particles

Considering that there will be many , Through a function Particle To generate , The code is as follows

var firework;
function Particle(x, y) {
    this.pos = createVector(x, y)
    this.vel = createVector(0, 0)
    this.acc = createVector(0, 0)
    this.update = function () {
        this.vel.add(this.acc)
        this.pos.add(this.vel)
        this.acc.mult(0)
    }
    this.show = function () {
        point(this.pos.x, this.pos.y)
    }
}
# call firework.update() and firework.show() Display the fireworks particles
function setup() {
    createCanvas(1303 / 2, 734 / 2)
    stroke(255)
    strokeWeight(4)
    firework = new Particle(200, 150)
}
function draw() {
    background(50);
    firework.update()
    firework.show()
}

give the result as follows :

Let the fireworks particles appear randomly at the bottom

modify setup Medium firework, Let it appear anywhere at the bottom

firework = new Particle(random(width), height)

there width and height It means the width and height of the canvas

give the result as follows

Let the fireworks particles move upward

It just needs to be modified Particle Medium this.vel that will do

this.vel = createVector(0, -4)

createVector The first parameter in represents x Speed of shaft , A positive number is the rate to the right , Negative is the rate to the left ; The second parameter represents y Speed of shaft , Negative is up , Is down

The effect is as follows

Let the particles use gravity effect , It can move downward

First declare a variable globally gravity, stay setup Set gravity in function

gravity = createVector(0, 0.2)
firework.applyForce(gravity)
this.applyForce = function (force) {
    this.acc.add(force)
}

The effect is as follows

Need a lot of fireworks particles

You need to create a Firework function

function Firework() {
    this.firework = new Particle(random(width), height)
    this.update = function () {
        this.firework.applyForce(gravity)
        this.firework.update()
    }
    this.show = function () {
        this.firework.show();
    }
}
# And then again draw in , adopt for Cycle to show a lot of fireworks particles
function draw() {
    background(50)
    fireworks.push(new Firework())
    for (var i = 0; i < fireworks.length; i++) {
        fireworks[i].update()
        fireworks[i].show()
    }
}

give the result as follows

Let the fireworks particles disappear when they reach their vertex

function Firework() {
    this.firework = new Particle(random(width), height)
    this.update = function () {
        if (this.firework) {
            this.firework.applyForce(gravity)
            this.firework.update()
            if (this.firework.vel.y >= 0) {
                this.firework = null
            }
        }
    }
    this.show = function () {
        if (this.firework) {
            this.firework.show();
        }
    }
}

The effect is as follows

The moment of disappearance , Let the surrounding blasting

There will be more changes here , The main changes are Firework

function Firework() {
    this.firework = new Particle(random(width), height, true)
    this.exploded = false
    this.particles = []
    this.update = function () {
        if (!this.exploded) {
            this.firework.applyForce(gravity)
            this.firework.update()
            if (this.firework.vel.y >= 0) {
                this.exploded = true
                this.explode()
            }
        }
        for (let i = 0; i < this.particles.length; i++) {
            this.particles[i].applyForce(gravity)
            this.particles[i].update()
        }
 
    }
    this.explode = function () {
        for (let i = 0; i < 100; i++) {
            var p = new Particle(this.firework.pos.x, this.firework.pos.y)
            this.particles.push(p)
        }
    }
    this.show = function () {
        if (!this.exploded) {
            this.firework.show();
        }
        for (let i = 0; i < this.particles.length; i++) {
            this.particles[i].show()
        }
    }
}

give the result as follows

Random multiple explosion

You can modify Particle To improve the above effect , The revised code is

function Particle(x, y, firework) {
    this.pos = createVector(x, y)
    this.firework = firework
    if (this.firework) {
        this.vel = createVector(0, random(-12, -8))
    } else {
        this.vel = p5.Vector.random2D()
        this.vel.mult(random(1, 6))
    }
    this.acc = createVector(0, 0)
    this.applyForce = function (force) {
        this.acc.add(force)
    }
    this.update = function () {
        this.vel.add(this.acc)
        this.pos.add(this.vel)
        this.acc.mult(0)
    }
    this.show = function () {
        point(this.pos.x, this.pos.y)
    }
}

The effect is as follows :

Show less fireworks

By adjusting the probability , Let's show less fireworks

We will draw Function

if(random(1)<0.1){
    fireworks.push(new Firework())
}

Modified into :

if(random(1)<0.02){
    fireworks.push(new Firework())
}

This will make it less

And then we found out , The fireworks are too scattered , Fix the problem that fireworks are too scattered

To Particle in , find update Method , Add inside

if(!this.firework){
    this.vel.mult(0.85)
}

It can be understood as ,mult The greater the value of, the greater the force, and the more scattered the explosion

Fade out effect is achieved

After dispersing , Need to fade out slowly ,

In fact, it mainly introduces a variable lifespan, Let it come from 255 Begin to decline , adopt stroke(255,this.lifespan) To fade out

The following code

function Particle(x, y, firework) {
    this.pos = createVector(x, y)
    this.firework = firework
    this.lifespan = 255
    if (this.firework) {
        this.vel = createVector(0, random(-12, -8))
    } else {
        this.vel = p5.Vector.random2D()
        this.vel.mult(random(1, 6))
    }
    this.acc = createVector(0, 0)
    this.applyForce = function (force) {
        this.acc.add(force)
    }
    this.update = function () {
        if(!this.firework){
            this.vel.mult(0.85)
            this.lifespan -= 4
        }
        this.vel.add(this.acc)
        this.pos.add(this.vel)
        this.acc.mult(0)
    }
    this.show = function () {
        if (!this.firework) {
            strokeWeight(2)
            stroke(255,this.lifespan)
        } else {
            strokeWeight(4)
            stroke(255)
        }
        point(this.pos.x, this.pos.y)
    }
}

The effect is as follows

Change the background color

stay setup Pass through background Function to change the background color to black

background(0)

At the same time draw add to

colorMode(RGB)
background(0, 0, 0, 25)

colorMode Used to set the color model , except RGB, And on top of it HSB;background Of 4 The first parameter is the corresponding rgba

The effect is as follows

Add fireworks colors

Mainly add color to fireworks , You can add random colors with random numbers , Mainly in the Firework Add a little

this.hu = random(255)

Here we are , About “ How to use it? Python Code to achieve the most dazzling fireworks ” That's the end of my study , I hope we can solve your doubts . The combination of theory and practice can better help you learn , Let's try ! If you want to continue to learn more related knowledge , Please continue to pay attention to Yisu cloud website , Xiaobian will continue to strive to bring you more practical articles !


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved