de rechthoek beweegt zich vanuit het midden

de rechthoek beweegt zich, vanuit het midden, van links naar rechts

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

rectMode(Center) is uitgeschakeld

In "Vierkant" is rectMode(CENTER); uitgeschakeld

de rechthoek verdwijnt rechts uit beeld

 
bewegingsmethode  xLiRe() in de superclass "Vormen".                     terug naar de inleiding
 
In de superclass "Vormen" de bewegingsmethode xLiRe() (regel 17 t/m 22) geplaatst

beweging in de schets toegepast op het object vormen2 (regel 35 van de schets)

Omdat de variabele float x; ,de rechthoek beweegt zich in x richting, in de class  "Vierkant"

ook in de superclass "Vormen" ,tbv de methode xLiRe(), nodig is wordt deze variabele in "Vormen" global gemaakt. (regel 5 in "Vormen")

In de schets "polymorfisme met objecten in een array" worden de variabelen tbv de superclass

via super(x_, y_) aan de constructor van de superclass gegeven waar ze dan global worden gemaakt.

Er zijn dus twee manieren om variabelen in pde global te maken.

Zie ook class "Rechthoek" In p5.js waar de tweede methode wordt toegepast.

De schets

 

// De constructor van de class "Vierkant: heeft de argumenten x, y, b en h. 
//1) Declareren van de objecten van het type Vormen  
 
Vormen vormen1;  
Vormen vormen2; 
Ruitjes ruitjespap; 
 
//Declareren van de objecten van het type Cirkel en Vierkant mag ook 
//men spreekt van inheritance  
//want de objecten erven eigenschappen van de superclass "Vormen" 
 
//Cirkel vormen1; 
//Vierkant vormen2; 
 
void setup() {   
  size(480, 270);  
 // fullScreen(); 
 float y = height/2; 
 float x = width/2; 
 float n = width/5; 
  
//2) construeren van de objecten  
 ruitjespap = new Ruitjes(n,x,y); 
 vormen1 = new Cirkel();   
 vormen2 = new Vierkant(x, y, n*2, n);  
}   
 
//3) tekenen van de objecten  
void draw() {   
 background(255);  
 ruitjespap.display(); 
 vormen1.display();   
 vormen2.display();  
 vormen2.xLiRe(); 
}
 
De super- of parent class
 
 

class Vormen { 
   
  float xsnelhLi = 1; 
  float x;  //float x wordt hier global gedeclareerd 
    
 Vormen() {  
   
 } 
  
   void display() {  
 //Dit is de lege display methode die wordt overreden in de "Cirkel" en "Vierkant" subclassen 
 //ivm overriding moeten alle methodes van de subclasses ook in de superclass staan  
 }  
 
// de bewegingsmethode, het object beweegt zich van links naar rechts en weer terug 
void xLiRe() {      
    x = x + xsnelhLi;      
    if ((x > width) || (x < 0)) {      
      xsnelhLi = xsnelhLi * -1;    
    }    
  }   
}
 

 De subclass Vierkant

met een constructor met de argumenten x, y, b, en h (regel 17)
float x (regel 7) wordt, tbv de bewegingsfunctie, in de superclass global gemaakt (zie regel 5 in de superclass "Vormen")
 
 


class Vierkant extends Vormen { 
   
//de constructor variabelen moeten global worden gedeclareerd  
//dit omdat ze in de methode display() worden gebruikt 
 
// float x;  
// float x wordt ook gebruikt in de bewegingsmethode xLiRe() in de superclass "Vormen" 
// float x wordt daarom in de superclass global gedeclareerd 
// door float x hier in te schakelen blijft de rechthoek stil staan  
// want deze float x override de float x in de superclass 
   
// De variabelen float y, float b, en float h worden ook global door ze naar de superclass te verplaatsen 
  float y; 
  float b; float h; 
   
Vierkant(float x_, float y_, float b_, float h_) {  
   
//De locale variabelen x_, y_, b_, en h_, krijgen hun waarden van de constructor van de schets 
  x = x_;   
  y = y_; //De locale constructor variabelen copieeren naar globale variabelen 
  b = b_; h = h_; 
  
 } 
  
 void display() {   
  rectMode(CENTER);   
  fill(175);   
  stroke(0);   
  rect(x, y, b, h);  
 }  
} 

de subclass  "Cirkel"

 


class Cirkel extends Vormen { 
   
Cirkel() {  // de lege constructor 
 } 
  
void display() {   
 ellipseMode(CENTER);   
 stroke(0);   
 ellipse(width/4, height/4, 40, 40);  
 }  
}