Processing與粒子系統(tǒng)的實現(xiàn)

ParticleSystem ps;

PShape s;

float angle=0;

float aVelocity=0;

float aAcceleration=0.001;

void setup() {

? size(240, 860);

? ps = new ParticleSystem(new PVector(width/2, height-50));

}

void draw() {

? background(255);

? ps.addParticle();

? ps.run();

}

void mousePressed(){

? ps=(new ParticleSystem(new PVector(mouseX,mouseY)));

}

class Particle {

? PVector location;

? PVector velocity;

? PVector acceleration;

? float lifespan;

? Particle(PVector l) {

? ? // The acceleration

? ? acceleration = new PVector(0, 0.05);

? ? // circel's x and y ==> range

? ? velocity = new PVector(random(-1, 1), random(-14, -1));

? ? // apawn's position

? ? location = l.copy();

? ? // the circle life time

? ? lifespan = 255.0;

? }

? void run() {

? ? update();

? ? display();

? }

? void update() {

? ? velocity.add(acceleration);

? ? location.add(velocity);


? }

? boolean isDead() {

? ? if (lifespan <= 0) {

? ? ? return true;

? ? } else {

? ? ? return false;

? ? }

? }

? void display() {

? ? // border

? ? stroke(0, lifespan);

? ? // border's weight

? ? strokeWeight(1);

? ? float r = random(0,255);

? ? float g = random(0,255);

? ? float b = random(0,255);

? ? // random the circle's color

? ? fill(r,g,b, lifespan);

? ? rectMode(CENTER);

? ? pushMatrix();

? // translate(0,0);

? ? rotate(angle);


? ? float k=random(1,10);

? ? line(location.x-k,location.y,location.x+k,location.y);

? ? ellipse(location.x+k,location.y,8,8);

? ? ellipse(location.x-k,location.y,8,8);? ?

? ? line(location.x,location.y-k,location.x,location.y+k);

? ? ellipse(location.x,location.y+k,8,8);

? ? ellipse(location.x,location.y-k,8,8);


? ? s=createShape();

? s.beginShape();

? s.vertex(location.x+50/2,location.y+18/2);

? s.vertex(location.x+61/2,location.y+37/2);

? s.vertex(location.x+83/2,location.y+43/2);

? s.vertex(location.x+69/2,location.y+60/2);

? s.vertex(location.x+71/2,location.y+82/2);

? s.vertex(location.x+50/2,location.y+73/2);

? s.vertex(location.x+29/2,location.y+82/2);

? s.vertex(location.x+31/2,location.y+60/2);

? s.vertex(location.x+17/2,location.y+43/2);

? s.vertex(location.x+39/2,location.y+37/2);

? s.endShape();

? ? shape(s);

? ? popMatrix();



? ? // draw circle

? ? //float k=10;

? // ellipse(location.x, location.y, k, k);

? }

}

class ParticleSystem {

? ArrayList<Particle> particles;

? PVector origin;

? ParticleSystem(PVector position) {

? ? origin = position.copy();

? ? particles = new ArrayList<Particle>();

? }

? void addParticle() {

? ? particles.add(new Particle(origin));

? }

? void run() {

? ? for (int i = particles.size()-1; i >= 0; i--) {

? ? ? Particle p = particles.get(i);

? ? ? p.run();

? ? ? if (p.isDead()) {

? ? ? ? particles.remove(i);

? ? ? }

? ? }

? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,142評論 0 2
  • 大軍西去,人去樓空。 獨有茉莉香飄萬里, 又有芳草青青楊柳依依, 唯有鴻雁鳴啾啾。 軍從萬里歸, 庶民歡躍,遠聞暴...
    陳旭_vivi閱讀 285評論 3 3
  • 昏昏沉沉的一天又過去,身體一天比一天疲憊,自己最近有點太著急了。趕緊調(diào)整! 今天去維護資源的時候,發(fā)現(xiàn)有的顧客竟然...
    燕子_e711閱讀 199評論 0 1
  • 迷霧漸失來路,不知青鳥歸處。橋邊倚欄人,望斷西沉日暮。何故?何故?心頭相思長駐。
    我是CC閱讀 233評論 0 2

友情鏈接更多精彩內(nèi)容