05 - Particle Systems

Začalo sa to v '80 rokoch. Vtedy bol definovaný pojem "particle system"
Od vtedy sa s ním stretávame všade tam, kde sa nám hodí simulácia vody, ohňa, dymu a podobne... Od filmov až po default vizualizér v iTunes (mimochodom, pôvodne napísaný prave v processingu)
Na vystavanie vlastného "particle" systému nám tentokrát bude stačiť takmer úplne kód z predchádzajúcich lekcií. Tentokrát získané znalosti ideme zúročiť.
Jedna častica
Začnime so sytémom obsahujúcim "jednu časticu".
Tentokrát začnime s prázdnym sketchom. A pridajme doň poslednú verziu triedy Mover. Avšak odteraz ju premenujeme na Particle
Všetky potrebné dáta a metódy tam už máme!
position
velocity
acceleration
display()
update()
A poďme jeden particle zobraziť + aplikovať gravitačnú silu:
Fajn. Zobrazí sa jeden bod. A padne dole.

Pre zjednodušenie tentokrát priamo v konštruktore v triede Particle nastavme náhodnú velocity.
Ok... vyletí hore a potom dole.
Čaro particle systému tkvie práve v tom, že tu nastáva "flow of particles". Stále pribúdajú nové.
Avšak aby to by mohlo spôsobiť, že časom sa pamäť zaplní a/alebo výpočet počítať prestane zvládať.
Kľúčovou novou vlastnosťou je zavedenie "životnosti" objektu.
Keď sa lifespan minie, dané miesto môžeme v pamäti uvoľniť.
Poďme si to teraz aplikovať na náš príklad s jednou časticou.
Sample sketch
Použi vlastný sketch alebo výchádzaj z tohoto:
Úloha 1
V sketchi v metóde draw kontroluj, či častica nieje kaput pomocou metódy isDead()
Ak sa jej čas naplnil, zmeň pozadie na červené
Úloha 2
Miesto červeného pozadia vytvor opäť novú časticu.
Pole častíc
Ok, možno si poviete... toto sme predsa užm robili.
Miesto let particle bude teraz let particles = [] a prepísať particle -> particles a pridať for-cyklus.
Takmer... ale je tu jedno ALE. To ale súvisí s tým, že chceme mať prúd častíc - nové pribúdajú a staré sa mažú.
Pozrime sa, aké metódy máme k dispozícii pre Array() v javascripte:

Úloha 3
Uprav predošlú úlohu tak, aby pracovala s poľom particles
V každe iterácií draw() pridaj ďaľší particle
Hint 1: Pre pridávanie particles môžeš použiť
Hint 2: Pre mazanie môžeš použiť
Sample sketch
Použi vlastný sketch alebo výchádzaj z tohoto:
Úloha 4
Pridaj v každom kroku viac prvkov naraz (použi for cyklus)
Úloha 5
Skús použiť vlastný tvar - tak aby bol orientovaný. Napr. "fontánku"
Úloha 6:
Vo velocity namiesto random() použi randomGaussian()
+ Bonus: export GIF
Dedičnosť v objektoch
Čo spraviť, ak chceme emitovať rôzne prvky?
Jedna zo skvelých možností, ktoré nám triedy umožňujú, je práve dedičnosť.
Je to v niečom podobné, ako napr. pri klasifikácií vtáctva:



Majú rovnaké atribúty:
zobák
krídla
2 × nohy
perie
A tiež zdielajú mnohé schopnosti. Vedia:
lietať
jesť
spať
Avšak každý druh vyzerá trocha inak - i keď s ostatnými zdiela hore vymenované atribúty a schopnosti. Niektoré vedia navyše aj plávať, iné loviť alebo spievať.
Pre našu situáciu by sme povedali, že máme triedu "Vták" a pod-triedy (resp. trieda -> rad -> čelaď -> druh)
Podobný vzťah si vieme definovať pri triedach. Kde vieme vytvoriť novú triedu (napr. SparkleParticle ktorá rozširuje triedu Particle)
Kľúčové sú tu dve slová: extends a super()
Príklad:
Úloha 7:
Priprav obálku/krabičku s prekvapením. Po rozkliknutí z nej vyletia konfety.
konfety sú rôznych tvarov a farieb (vytvor nové triedy, ktoré rozširujú trietu
Particle)v obálke/krabičke je ich presne definovaný obmedzený počet (napr. 1000) - ktorý sa priebežne míňa (a časom určite minie)
Príklad:
Prezentácia
Odprezentované príklady:
Zdoje a ďaľsie informácie
Last updated






