toets 2 ingedrukt, een mix van grote en kleine partikels

toets 2 ingedrukt, een mix van grote en kleine partikels

 

 

 

alle grote partikels zijn verdwenen

 

alle grote partikels zijn verdwenen

 

 

blauwe en groene partikels variƫren in lengte

 

blauwe en groene partikels variƫren in lengte
dit door in regel 51 en 52 "b" te vervangen door random(n,3*n)

partikel fonteinen.                      terug naar de inleiding               bekijk de fonteinen in fullScreen

In de schets wordt gebruik gemaakt van de Arraylist en de enhanced for loop   onder de schets staat de class "Particle", eventueel de class "Ruitjes" toevoegen

De arraylist objecten worden in het globale deel gedeclareerd. Ze worden in het setup deel aangemaakt. 
In de draw() lus worden de arraylists geinitieerd.
Met de add methode (regel 43 t/m 46) wordt er bij iedere tekencyclus een cel met een object van de Particle class bijgemaakt.
Dit is de reden dat er weer "new" staat !!!
In de enhances for loop worden voor iedere partikel de methodes uitgevoerd.
Binnen de if statements wordt de lengte van de Arraylist bepaald. Hier zijn dit 80 cellen. (p = 80; regel 11)
 

De toetsfuncties

toets "s" stopt en toets "r" start de animatie
toets "z" geeft een zwarte achtergrond en toets "a" geeft de oorspronkelijke achtergrondkleur
toetsen "2", "3" en "4" verandert de grootte , plaats en alpha van de partikels.
toetsen  "5" , "6" en "7" verandert het aantal partikels.
Omdat "p"  in draw() in het if statements, binnen de krulhaken, staat is voor deze toetsen een setup() nodig.
toets "1" is de reset toets
 
 

//declareren van de Arraylist objecten 
//De lengte van die lijst staat niet vast
ArrayList particles0; // zijn de rode partikels
ArrayList particles1; // zijn de blauwe partikels
ArrayList particles2; // zijn de groene partikels
ArrayList particles3;
 
float x; float y; float n;
int p = 80; //het max aantal partikels in de arraylist
float alpha = 40;
boolean zwart;
 
Ruitjes ruitjespap;
 
void setup() {
 // fullScreen();
 // size(960, 540);
  size(1920, 1080);
  x = width/2; 
  y = height/2; 
  n = height/20;
 //aanmaken van de Arraylist objecten 
  particles0 = new ArrayList();
  particles1 = new ArrayList();
  particles2 = new ArrayList();
  particles3 = new ArrayList();
  ruitjespap = new Ruitjes(n,x,y);
}
 
void draw() {
  if (key == 'z' || zwart)  {   
    background(0);
    zwart = true;
  }
  else
  {
    background(#E6FBFF);
  }
 
  float b = n*3;
  float h = n*3;
  
  //Hier wordt met add na iedere tekencyclus object particles geinitieerd en aan de list toegevoegd.
  //Als er geen beweging is worden de partikels over elkaar geteken
  //Door de beweging krijgen x en y andere waarden en wordt er een fontijn van partikels getoond
  //b en h zijn de breedte en hoogte van de partikels
  
  //constructor                 x     y  b  h          kleur
  particles0.add(new Particle(x-10*n, y, b, h, color(255,0,   0, alpha))); 
  particles1.add(new Particle(x+10*n, y, b, h, color(0,  0, 255, alpha)));
  particles2.add(new Particle(x,  y-7*n, b, h, color(0,255,   0, alpha)));
  particles3.add(new Particle(x,  y+7*n, b, h, color(255, 255,0, alpha)));
 // ruitjespap.display();
 
  //in de enhanced for loops wordt het Particle object gedeclareerd 
  //Middels deze loop worden voor iedere partikel de object methodes uitgevoerd
   for (Particle rood  : particles0) {       
    rood.snelhYPlus();             
    rood.displayR();
  }
   for (Particle blauw : particles1) {       
    blauw.snelhXMin();             
    blauw.displayR();
  }
   for (Particle groen : particles2) {       
    groen.snelhXPlus();             
    groen.displayE();
  }
   for (Particle geel  : particles3) {                        
    geel.displayE();
    geel.snelhYMin();
  }
  // Dit deel zorgt er voor dat er niet meer dan 80 particle objecten worden aangemaakt, 
  // telkens als object p = 80 is aangemaakt wordt object 0 verwijdert
  if (particles0.size() > p) {  //size is hier het aantal cellen in de arraylist 
      particles0.remove(0);
  }
 
  if (particles1.size() > p) {
      particles1.remove(0);
  }
  
  if (particles2.size() > p) {
      particles2.remove(0);
  }
  
  if (particles3.size() > p) {
      particles3.remove(0);
  }
}
 
  void keyPressed() { 
  if (key == 's') { 
    noLoop(); 
  } 
  
   if (key == 'r') { 
    loop(); 
  } 
  
  if (key == 'a') {    
     zwart = false; 
  } 
 
  if (key == '1') {
    alpha = 40;
    p = 80; setup();
  }
  
  if (key == '2') {
    n = height/40; alpha = 60;
  }
  
  if (key == '3') {
    n = height/60; alpha = 80;
  }
  
  if (key == '4') {
    n = height/80; alpha = 120;
  }
  
   if (key == '5') {
     p = 20; setup();
  }
  
   if (key == '6') {
     p = 100; setup();
  }
  
   if (key == '7') {
     p = 120; setup();
  }
 }
 
De class Particle
 

 
 class Particle {
  float x , y , h , b;
  float xspeed;
  float yspeed;
  color c;
 
  Particle(float x_, float y_, float h_, float b_, color c_) {
    x = x_; y = y_; c = c_; h = h_; b = b_;
//Ieder object krijgt een beginsnelheid tussen de -8 en +8
//door deze hoge snelheden zie je in het centrum beter de contouren van de vierkanten
    xspeed = random(-8, 8);
    yspeed = random(-8, 8);
  }
 
  void snelhXPlus() {
    xspeed += 0.01; //De snelheid neemt langzaam toe
  }
 
  void snelhXMin() {
    xspeed -= 0.01; 
  }
 
  void snelhYPlus() {
    yspeed += 0.01; 
  }
 
  void snelhYMin() {
    yspeed -= 0.01; 
  }
 
  void displayR() {
    x = x + xspeed;
    y = y + yspeed;
    rectMode(CENTER);
    stroke(c);
    strokeWeight(1);
    fill(c);
    rect(x, y, h, b);
  }
  
  void displayE() {
    x = x + xspeed;
    y = y + yspeed;
    stroke(c);
    strokeWeight(1);
    fill(c);
    ellipse(x, y, h, b);
  }
}