...
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) { // draw zeichnethe direction dieof abschussrichtungshoot 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 der ball wird neu ausgerichtetball is given a new direction 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 12
...