SmallBallpublic class SmallBall extends Object implements RunnableA SmallBall is a lightweight animated ball that runs in it's own thread.
It moves within a rectangular region, bouncing off the walls. |
Fields Summary |
---|
static Random | random | static int | delay | static int[] | matrix | int | top | int | left | int | width | int | height | int | posX | int | posY | int | radius | int | ballSize | int | deltaX | int | deltaY | Graphics | g | Canvas | canvas | public boolean | stop |
Constructors Summary |
---|
SmallBall(Canvas c, int left, int top, int width, int height)Constructor defines the region in which the ball moves as well
as its starting position.
super();
canvas = c;
this.left = left + 1;
this.top = top + 1;
this.width = width - (2 * radius + 2);
this.height = height - (2 * radius + 2);
// use positive random #s
this.posX = (random.nextInt()>>>1) % (this.width-20) + 10;
this.posY = (random.nextInt()>>>1) % (this.height-20) + 10;
deltaX = random.nextInt() & 1;
deltaY = random.nextInt() & 1;
if (deltaX == 0) deltaX = -1;
if (deltaY == 0) deltaY = -1;
|
Methods Summary |
---|
static void | faster()
delay -= 10;
if (delay < 0) delay = 0;
| boolean | inside(int x1, int y1, int x2, int y2)
return (posX <= x2)
&& (posY <= y2)
&& ((posX + ballSize) >= x1)
&& ((posY + ballSize) >= y1);
| void | paint(Graphics g)Paint the ball.
g.setColor(0);
g.fillArc(posX, posY, ballSize, ballSize, 0, 360);
| public void | run()Starts the ball running.
// System.out.println("starting... " + this);
int right = left + width;
int bottom = top + height;
stop = false;
while (!stop) {
ballSize = radius * 2;
// calculate a direction of the ball
// as an integer in the range
// -2 .. 2 (excluding 0)
int direction = deltaX + deltaY;
if (direction == 0) direction = deltaX + 2*deltaY;
// is the current position colliding with any wall
int collision = 0;
if (posX <= left || posX >= right) collision++;
if (posY <= top || posY >= bottom) collision += 2;
// change the direction appropriately
// if there was a collision
if (collision != 0) {
collision = (collision - 1) * 2;
deltaX = matrix[direction+2][collision];
deltaY = matrix[direction+2][collision+1];
}
// calculate the new position and queue a repaint
posX = posX + deltaX;
posY = posY + deltaY;
canvas.repaint(posX - 1, posY - 1,
ballSize + 2, ballSize + 2);
// use the delay to control the speed of the ball
try {
Thread.sleep(delay);
} catch (InterruptedException e) {}
}
| static void | slower()
delay += 10;
if (delay > 100) delay = 100;
| public java.lang.String | toString()
return super.toString() + " x = " + posX + ", y = " + posY;
|
|