Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Eine Klasse kann von einer anderen Klasse abgeleitet werden. Damit erbt diese Klasse die Eigenschaften der Basisklasse. Die Klasse erbt die Methoden und Attribute der Basisklasse. Sollte sie aber Methoden oder Attribute setzen, welche gleich heissen wie solche in der Basisklasse, dann werden die Basisklassen Eigenschaften überschrieben.

Beispiel BallKlasse

 

Code Block
BouncingBall ball1;
BouncingBall ball2;
 
PVector      p1 = new PVector();
PVector      p2 = new PVector();
boolean      drag = false;
 
void setup()
{
  size(800,600);
 
  ball1 = new BouncingBall(100,100);
  ball2 = new BouncingBall(50,50);
 
  // svg bild soll zentriert sein
  shapeMode(CENTER);
  smooth();
}
 
void draw()
{
  // hintergrund loeschen
  //background(255);
  // ghosting
  fill(255,255,255,60);
  rect(0,0,width,height);
 
  if(drag)
  { // zeichne die abschussrichtung
    p1.set(ball1._pos.x,ball1._pos.y,0);
    line(p1.x,p1.y,p2.x,p2.y);
  }
 
  // zeichne den ball
  ball1.draw();
  ball2.draw();
}
 
void mousePressed()
{
  drag = true;
  p1.set(ball1._pos.x,ball1._pos.y,0);
  p2.set(mouseX,mouseY,0);
}
 
void mouseDragged()
{
  p2.set(mouseX,mouseY,0);
}
 
void mouseReleased()
{
  drag = false;
 
  // abschuss staerke berechnen
  PVector dir = PVector.sub(p2,p1);
  // laenge verkuerzen
  dir.mult(.09);
 
  // der ball wird neu ausgerichtet
  ball1.set(p1,dir,.993);
  ball2.set(p1,dir,.95);
}

BouncingBall

Code Block
class BouncingBall
{
  PVector _pos;
  PVector _dir;
  float   _dampV;
  PShape  _shape;
  int     _w;
  int     _h;
   
  // konstruktor
  BouncingBall(int shapeWidth,int shapeHeight)
  {
    _pos = new PVector(width/2, height/2);
    _dir = new PVector(0,0);
    _dampV = 1;
     
    _w = shapeWidth;
    _h = shapeHeight;
     
    _shape = loadShape("ball1.svg");
  }
   
  // setzt die neue pos + richtung + daempfung
  void set(PVector pos,PVector dir,float dampV)
  {
    _pos = pos.get();
    _dir.add(dir);
    _dampV = dampV;
  }
   
  // erneuert die aktuelle position
  void calcPos()
  {
    // aktuelle position verschieben
    _pos.add(_dir);
     
    // bewegungs vektor veraendert
    _dir.mult(_dampV);
     
    // teste horizontal 
    if(_pos.x + _w/2 > width)
    {
      _dir.x *= -1;
      _pos.x = width - _w/2;
    }
    else if(_pos.x - _w/2 < 0)
    {
      _dir.x *= -1;
      _pos.x = _w/2;
    }
     
    // teste vertikal 
    if(_pos.y + _h/2 > height)
    {
      _dir.y *= -1;
      _pos.y = height - _w/2;
    }
    else if(_pos.y - _h/2 < 0)
    {
      _dir.y *= -1;
      _pos.y = _h/2;
    }
     
  }
   
  // zeichnet den ball
  void draw()
  {
    calcPos();
     shape(_shape,
          _pos.x,_pos.y,
          _w,_h);
  }
}
 
class BallEx extends BouncingBall
{
  BallEx(int size)
  {
     super(size,size);
  }
 
  void draw()
  {
    super.draw();
    line(0,0,_pos.x,_pos.y);
  }
 
}

Aufgabe:

  • Erweitere das Programm, dass mehrere Bälle unabhängig voneinander platziert werden können
  • Erweitere die Klasse um eine neue Art von Bällen