If you're seeing this message, it means we're having trouble loading external resources on our website.

Se você está atrás de um filtro da Web, certifique-se que os domínios *.kastatic.org e *.kasandbox.org estão desbloqueados.

Conteúdo principal

Sistemas de sistemas de partículas

Vamos revisar por um momento onde estamos. Nós sabemos como falar sobre um único objeto Particle. Também sabemos falar sobre um sistema de objetos Particle, chamamos isso de "sistema de partículas". E nós definimos um sistema de partículas como uma coleção de objetos independentes. Mas um sistema de partículas não é também um objeto? Se esse for o caso (e é), não há nenhuma razão para não podermos ter também uma coleção de vários sistemas de partículas, isto é, um sistema de sistemas.
Esta linha de pensamento poderia, certamente, nos levar ainda mais longe, e você poderia se trancar em um porão por dias, esboçando um diagrama de um sistema de sistemas de sistemas de sistemas de sistema de sistemas. Afinal, é assim que o mundo funciona. Um órgão é um sistema de células, o corpo humano é um sistema de órgãos, um bairro é um sistema de corpos humanos, uma cidade é um sistema de bairros e assim por diante. Embora este seja um caminho interessante de seguir, é um pouco além de onde precisamos estar no momento. No entanto, é bastante útil saber como escrever um programa que mantém controle sobre vários sistemas de partículas, em que cada um deles mantém o controle de várias partículas. Considere o seguinte cenário:
  • Você começa com uma tela em branco.
  • Você clica com o mouse e gera um sistema de partículas na posição do mouse.
  • Cada vez que você clica com o mouse, um sistema de partículas é criado na posição do mouse.
Tente você mesmo:
Como faríamos para programar isso? No artigo anterior, armazenamos uma única referência a um objeto ParticleSystem na variável ps.
var ps = new ParticleSystem(new PVector(width/2, 50));

draw = function() {
  background(50, 50, 50);
  ps.addParticle();
  ps.run();
};
Agora que temos múltiplos sistemas, um número potencialmente crescente, não queremos armazená-los em variáveis individualmente nomeadas. Em vez disso, vamos usar um array para controlar todos os sistemas. Vamos iniciá-lo como vazio quando o programa começar:
var systems = [];
Sempre que o mouse for pressionado, um novo objeto ParticleSystem é criado e colocado no array:
mousePressed = function() {
  systems.push(new ParticleSystem(new PVector(mouseX, mouseY)));
};
E em draw(), ao invés de referenciar um único objeto ParticleSystem, passamos por todos os sistemas no array e chamamos run() em cada um deles.
draw = function() {
  background(50, 50, 50);
  for(var i = 0; i < systems.length; i++){
    systems[i].addParticle();
    systems[i].run();
  }
};
Agora tente outra vez, com o código que escrevemos:

Quer participar da conversa?

Nenhuma postagem por enquanto.
Você entende inglês? Clique aqui para ver mais debates na versão em inglês do site da Khan Academy.