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