...
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 abschussrichtungdraw the direction of shoot p1.set(ball1._pos.x,ball1._pos.y,0); line(p1.x,p1.y,p2.x,p2.y); } // zeichnedraw denthe ballballs 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; // shooting abschussdirection staerkecalculation. berechnen PVector dir = PVector.sub(p2,p1); // laengeshorten the length verkuerzen dir.mult(.09); //the ball is dergiven balla wirdnew neudirection ausgerichtet ball1.set(p1,dir,.993); ball2.set(p1,dir,.95); } |
...
Code Block |
---|
class BouncingBall { PVector _pos; PVector _dir; float _dampV; PShape _shape; int _w; int _h; // constructor 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"); } // set the new position + direction + dampening void set(PVector pos,PVector dir,float dampV) { _pos = pos.get(); _dir.add(dir); _dampV = dampV; } // update the current position void calcPos() { // curent position shifted _pos.add(_dir); // movement vector modified _dir.mult(_dampV); // test horisontal 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; } // test vertical 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; } } // draw the ball void draw() { calcPos(); shape(_shape, _pos.x,_pos.y, _w,_h); } } |
Download Example
Exercise 12 A
- Modify the program, so that several balls can be placed independently of each other
Exercise 12 B
- Extend the class again to make a third kind of ball. Modify its attributes and methods to create new kinds of behavior
Example BallKlasse Extended
Code Block |
---|
class BallEx extends BouncingBall { BallEx(int size) { super(size,size); } void draw() { super.draw(); line(0,0,_pos.x,_pos.y); } } |
Download Example
Exercise:
...