OneHourProcessing 八日目
OneHourProcessing 八日目
今日作ったのはこちら
#OneHourProcessing #Proessing
— 霜暮黒夢@V高専生 (@V_hero_aid) August 11, 2020
八日目の作品です
>>>花火<<<
作るのにかかった時間は「1時間20分」
プログラム 思ったように 動かない 書いた通りに 動き続ける pic.twitter.com/qM7HsjQdbn
作るのにかかった時間は「1時間20分」
コード
PVector Gravity = new PVector(0, 0.05); ArrayList<Firework> fireworks = new ArrayList<Firework>(); void setup() { size(800, 450); noStroke(); } void draw() { background(0); for (Firework firework : fireworks) { firework.update(Gravity); firework.display(); } for (int i = 0; i < fireworks.size(); i++) if (fireworks.get(i).life < -10 && fireworks.get(i).particles.size() == 0) { fireworks.remove(i); i--; } } void setFirework() { Firework firework = new Firework(new PVector(random(width), height), 5, 35, color(255), new PVector(0, -10)); firework.setParticle(int(random(10, 20)), 3, int(random(50, 70)), color(int(random(150, 255)), int(random(150, 255)), int(random(150, 255))), random(3, 4)); fireworks.add(firework); } void mouseReleased() { setFirework(); }
Fireworkクラス
class Firework extends Particle { ArrayList<Particle> particles = new ArrayList<Particle>(); int particle_num; float particle_radius; float particle_initial; color particle_color; int particle_life; Firework(PVector pos, float radius, int life, color col, PVector initial) { super(pos, radius, life, col); vec = initial; } void setParticle(int particle_num, float particle_radius, int particle_life, color particle_color, float particle_initial) { this.particle_num = particle_num; this.particle_radius = particle_radius; this.particle_initial = particle_initial; this.particle_color = particle_color; this.particle_life = particle_life; } void update(PVector Gravity) { addVector(Gravity); super.update(); makeParticle(); if (particles.size() == 0) return; for (Particle particle : particles) { particle.addVector(Gravity); particle.update(); } for (int i = 0; i < particles.size(); i++) if (particles.get(i).life < 0) { particles.remove(i); i--; } } void display() { super.display(); if (particles.size() == 0) return; for (Particle particle : particles) particle.display(); } void makeParticle() { if (life != 0) return; float rad = PI / particle_num; for (int i = 0; i <= particle_num; i++) for (int j = 0; j <= particle_num; j++) { Particle particle = new Particle(new PVector(pos.x, pos.y), particle_radius, particle_life, particle_color); particle.vec = new PVector(cos(i * rad) * particle_initial, sin(i * rad) * cos(j * rad) * particle_initial); particles.add(particle); } } }
Particleクラス
class Particle { PVector pos; PVector vec; PVector acc; float radius; int life; color col; Particle(PVector pos, float radius, int life, color col) { this.pos = pos; this.radius = radius; this.life = life; this.col = col; vec = new PVector(0, 0); acc = new PVector(0, 0); } void update() { life--; vec.add(acc); pos.add(vec); acc.mult(0); } void display() { //fill(col); fill(col, life * 10); ellipse(pos.x, pos.y, radius * 2, radius * 2); } void addVector(PVector addVec) { acc.add(addVec); } }