Główna zawartość
Programowanie
Kurs: Programowanie > Rozdział 5
Lekcja 8: Systemy cząstek- Wprowadzenie do systemów cząstek
- Pojedyncza cząsteczka
- Wyzwanie: opadające liście
- System cząstek
- Wyzwanie: Rybie bąbelki
- Systemy systemów cząstek
- Wyzwanie: Podpalacz
- Typy cząstek
- Wyzwanie: Magiczny kocioł
- System cząstek z siłami
- Wyzwanie: Rzeczne skały
- Projekt: Kolonie stworzeń
© 2023 Khan AcademyWarunki użytkowaniapolitykę prywatnościInformacja o plikach cookie
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:
Chcesz dołączyć do dyskusji?
Na razie brak głosów w dyskusji