2016-11-29 2 views
0

Я пытаюсь создать эффект, когда появляется система частиц, где движение обнаруживается на экране. Пока у меня есть система обнаружения движения и система частиц, но частицы все появляются в одном и том же месте, и мне нужно, чтобы они были случайными, откуда они появляются. Любая помощь оцениваетсяОбработка: Проблемы с обнаружением частиц и движением

ps.addParticle (новый PVector (argX, argY)); ps.run();

+2

Пожалуйста, пост [mcve], которая фокусируется на проблеме, а не весь ваш эскиз. Например, нам действительно не нужно видеть минимальный или видеокод. Просто используйте жестко заданные значения для вашей системы частиц, таким образом, мы можем увидеть проблему, скопировав и вставив код. –

+0

Хорошо, у меня есть код здесь, где мои ценности не существуют, и я не уверен, почему это происходит, какие-либо предложения? – JHewitt

ответ

0

Я предполагаю, что вы начинаете с Daniel Shiffman's Simple Particle System демо (также доступно в обработке через Примеры> Темы> Имитация> Простая система частиц).

Если это так, обратите внимание, что ParticleSystem имеет origin PVector, который используется при добавлении частиц:

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

Если вы хотите, чтобы изменить положение икры для всех частиц вы можете просто изменить начало-х x, y.

Если вы хотите, чтобы породить новую частицу в случайном положении простого вариант заключается в создании возможности переопределения для метода addParticle() передать вашу случайные х, у позиции:

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

Вот полный пример с ухищрений, так что вы можете перетащить системы частиц происхождения или нажмите любую клавишу, чтобы породить новую частицу в случайном положении:

ParticleSystem ps; 

void setup() { 
    size(640, 360); 
    ps = new ParticleSystem(new PVector(width/2, 50)); 
} 

void draw() { 
    background(0); 
    ps.addParticle(); 
    ps.run(); 
} 

void mouseDragged(){ 
    ps.origin.set(mouseX,mouseY); 
} 
void keyPressed(){ 
    ps.addParticle(new PVector(random(width),random(height))); 
} 
// A class to describe a group of Particles 
// An ArrayList is used to manage the list of Particles 

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 addParticle(PVector customPosition) { 
    particles.add(new Particle(customPosition)); 
    } 

    void run() { 
    for (int i = particles.size()-1; i >= 0; i--) { 
     Particle p = particles.get(i); 
     p.run(); 
     if (p.isDead()) { 
     particles.remove(i); 
     } 
    } 
    } 
} 


// A simple Particle class 

class Particle { 
    PVector position; 
    PVector velocity; 
    PVector acceleration; 
    float lifespan; 

    Particle(PVector l) { 
    acceleration = new PVector(0, 0.05); 
    velocity = new PVector(random(-1, 1), random(-2, 0)); 
    position = l.copy(); 
    lifespan = 255.0; 
    } 

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

    // Method to update position 
    void update() { 
    velocity.add(acceleration); 
    position.add(velocity); 
    lifespan -= 1.0; 
    } 

    // Method to display 
    void display() { 
    stroke(255, lifespan); 
    fill(255, lifespan); 
    ellipse(position.x, position.y, 8, 8); 
    } 

    // Is the particle still useful? 
    boolean isDead() { 
    if (lifespan < 0.0) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
} 

для получения дополнительной информации быть уверены, чтобы проверить Particle Systems Nature of Code chapter

Кроме того есть быстрый взгляд на Chapter 6 «s оптимизации примечаниями на

Создание gajillions ненужных объектов PVector.

Update: Вы можете запустить демонстрационную сильфона право вдовца на пожизненное владение имуществом умершей жены в p5.js:

var system; 
 

 
function setup() { 
 
    createCanvas(720, 400); 
 
    system = new ParticleSystem(createVector(width/2, 50)); 
 
} 
 

 
function draw() { 
 
    background(51); 
 
    system.addParticle(); 
 
    system.run(); 
 
} 
 
function mouseDragged(){ 
 
    system.origin.set(mouseX,mouseY); 
 
} 
 
function keyPressed(){ 
 
    system.addParticleAt(createVector(random(width),random(height))); 
 
} 
 

 
// A simple Particle class 
 
var Particle = function(position) { 
 
    this.acceleration = createVector(0, 0.05); 
 
    this.velocity = createVector(random(-1, 1), random(-1, 0)); 
 
    this.position = position.copy(); 
 
    this.lifespan = 255.0; 
 
}; 
 

 
Particle.prototype.run = function() { 
 
    this.update(); 
 
    this.display(); 
 
}; 
 

 
// Method to update position 
 
Particle.prototype.update = function(){ 
 
    this.velocity.add(this.acceleration); 
 
    this.position.add(this.velocity); 
 
    this.lifespan -= 2; 
 
}; 
 

 
// Method to display 
 
Particle.prototype.display = function() { 
 
    stroke(200, this.lifespan); 
 
    strokeWeight(2); 
 
    fill(127, this.lifespan); 
 
    ellipse(this.position.x, this.position.y, 12, 12); 
 
}; 
 

 
// Is the particle still useful? 
 
Particle.prototype.isDead = function(){ 
 
    if (this.lifespan < 0) { 
 
    return true; 
 
    } else { 
 
    return false; 
 
    } 
 
}; 
 

 
var ParticleSystem = function(position) { 
 
    this.origin = position.copy(); 
 
    this.particles = []; 
 
}; 
 

 
ParticleSystem.prototype.addParticle = function() { 
 
    this.particles.push(new Particle(this.origin)); 
 
}; 
 

 
ParticleSystem.prototype.addParticleAt = function(position) { 
 
    this.particles.push(new Particle(position)); 
 
}; 
 

 
ParticleSystem.prototype.run = function() { 
 
    for (var i = this.particles.length-1; i >= 0; i--) { 
 
    var p = this.particles[i]; 
 
    p.run(); 
 
    if (p.isDead()) { 
 
     this.particles.splice(i, 1); 
 
    } 
 
    } 
 
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.4/p5.min.js"></script>

Particle System Preview

Смежные вопросы