Обработка: Почему моя система частиц рисует дважды в другом месте, как это следует за мышью? - PullRequest
2 голосов
/ 12 апреля 2020

Я новичок в обработке и хочу, чтобы моя система частиц следовала за моей мышью. На данный момент он тянется за мышью (что, я думаю, нормально), но он также рисует его дважды. Вот что у меня есть: у меня также есть класс «звезда», который я не включил, который dr aws простая звезда, которая следует за мышью.

ParticleSystem ps;

void setup() {
    ps = new ParticleSystem(new PVector(mouseX,mouseY));
size(1000,1000);
frameRate(30);
noStroke();
}

void draw(){
background(30);

    ps.followMouse();
    ps.addParticle();
    ps.run();
}

class ParticleSystem {

    ArrayList<Particle> particles = new ArrayList<Particle>();
    PVector origin;

    ParticleSystem(PVector position) {
        origin = position.copy();
    }

    void addParticle() {
        particles.add(new Particle(origin));
    } 

    void run() {
        for (int i = particles.size()-1; i >= 0; i--)
            particles.get(i).run();
    }

    void followMouse() {
        PVector mouse = new PVector(mouseX, mouseY);
        origin = mouse.sub(origin);
    }
}

class Particle {

  PVector pos, velocity = new PVector(random(-1, 1), random(-2, 0)), acceleration = new PVector(0, 0.05);

    Particle(PVector l) {
        pos = l.copy();
    }

    void run() {
        update();
        display();
    }

    void update() {
        velocity.add(acceleration);
        pos.add(velocity);
    }

    void display() {
        noStroke();
        fill(random(255),random(255), random(255));
        ellipse(pos.x,pos.y, 8, 8);
    } 
}

1 Ответ

3 голосов
/ 12 апреля 2020

Изменить followMouse() на это:

void followMouse() {
    origin = new PVector(mouseX, mouseY);
}
...