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

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Systemy systemów cząstek

Zatrzymajmy się na chwilę i przejrzyjmy, co już wiemy. Wiemy, jak komunikować się z indywidualnym obiektem Particle. Wiemy jak rozmawiać o systemie obiektów Particle a nazwaliśmy to “systemem cząsteczek”. Po czym stworzyliśmy system cząsteczek jako kolekcję niezależnych obiektów. Ale czy sam system cząsteczek nie jest obiektem? Jeżeli tak jest (a tak jest), nie ma powodu, dla którego nie moglibyśmy mieć kolekcji wielu systemów cząsteczek, czyli systemu systemów.
Ten tok myślenia można oczywiście dalej ciągnąć, przez co możesz zamknąć się na wiele dni w swojej piwnicy rysując diagramy systemów systemów systemów systemów systemów systemów. Systemów. W końcu tak działa świat. Narząd jest systemem komórek, ludzkie ciało jest systemem narządów, okolica jest systemem ciał ludzkich, miasto jest systemem okolic i tak dalej. Co prawda jest to ciekawe, ale trochę wykracza poza to, co jest nam teraz potrzebne. Mimo wszystko wiedza, jak napisać program który monitoruje wiele systemów cząsteczek monitorujących każdą cząsteczkę jest przydatna. Załóżmy następujący scenariusz:
  • Zaczynasz z pustym ekranem.
  • Klikasz myszką i tworzysz system cząsteczek w lokalizacji kursora.
  • Za każdym razem, gdy klikasz myszką, nowy system cząsteczek jest tworzony w lokalizacji kursora.
Spróbuj sam:
Jak można to opisać za pomocą kodu? W poprzednim artykule przechowywaliśmy pojedyncza referencję do obiektu ParticleSystem w zmiennej ps.
var ps = new ParticleSystem(new PVector(width/2, 50));

draw = function() {
  background(50, 50, 50);
  ps.addParticle();
  ps.run();
};
Teraz, gdy mamy wiele systemów, z liczbą którą możemy do woli zwiększać, nie chcemy przechowywać każdego z nich w oddzielnie nazywanej zmiennej. Zamiast tego, użyjemy tablicy aby mieć dostęp do wszystkich z nich. Będzie ona pusta w momencie, gdy program zaczyna swoją pracę:
var systems = [];
Zawsze, gdy wciśnięty zostanie klawisz myszy, nowy obiekt ParticleSystem jest tworzony i dodawany do tablicy:
mousePressed = function() {
systems.push(new ParticleSystem(new PVector(mouseX, mouseY)));
};
A w draw(), zamiast odnosić się do pojedynczego obiektu ParticleSystem, przeglądamy wszystkie systemy w tablicy i wywołujemy run() na każdym z nich.
draw = function() {
background(50, 50, 50);
for(var i = 0; i < systems.length; i++){
systems[i].addParticle();
systems[i].run();
}
};
Spróbuj ponownie, tym razem z własnym kodem: