...
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