Cześć,
piszę program, w którym kilka kulek ma odbijać się od siebie nawzajem. Niestety moja metoda, (touch()), nie chce działać. Czy pomógłby mi ktoś znaleźć błąd?
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import acm.graphics.GImage;
import acm.graphics.GLabel;
import acm.graphics.GObject;
import acm.graphics.GOval;
import acm.program.GraphicsProgram;
import acm.util.RandomGenerator;
import acmx.export.javax.swing.Timer;
public class Graphics extends GraphicsProgram {
private static final long serialVersionUID = 1L;
private final static int SIZE = 50;
private final static int WINDOW_SIZE = 600;
private final static double GRAVITY = 1;
private final static double ELASTICITY = 0.75;
private final static double FPS = 1000 / 60;
int[] i = { 0, 0, 0 };
double[] SPEED = { 3, 3, 3 };
double[] dyy = { 0, 0, 0 };
GOval[] tabKulek = new GOval[3];
GLabel[] ballText = new GLabel[3];
public void run() {
setSize(WINDOW_SIZE, WINDOW_SIZE);
// RandomGenerator rgen = RandomGenerator.getInstance();
int position = 0;
for (int i = 0; i < 3; i++) {
tabKulek[i] = ballDraw(position, 0, SIZE, SIZE);
add(tabKulek[i]);
ballText[i] = makeText(Integer.toString(i),
position / 2 + SIZE / 2, SIZE / 2);
add(ballText[i]);
position += 150;
}
bounceBall();
}
private void bounceBall() {
int a = 0;
while (true) {
int b = a % 3;
GOval ball;
GLabel text;
text = ballText[b];
ball = tabKulek[b];
floorsWalls(ball, b, text, tabKulek);
a++;
pause(FPS);
}
}
private void floorsWalls(GOval ball, int b, GLabel text, GOval[] tabKulek) {
ball.move(SPEED[b], dyy[b]);
text.move(SPEED[b], dyy[b]);
dyy[b] += GRAVITY;
if (belowFloor(ball) && dyy[b] >= 0) {
dyy[b] *= -0.95;
}
if (nextToWall(ball)) {
SPEED[b] *= -1;
}
touch(tabKulek);
}
private boolean nextToWall(GOval ball) {
return ((ball.getX()) >= WINDOW_SIZE - ball.getWidth() || (ball.getX()) <= 0);
}
private boolean belowFloor(GOval ball) {
return ball.getY() + ball.getHeight() >= getHeight();
}
private GLabel makeText(String i, double x, double y) {
GLabel text = new GLabel(i);
text.setLocation(x, y);
text.setFont(Font.SANS_SERIF);
return text;
}
private GOval ballDraw(double x, double y, double width, double height) {
GOval ball = new GOval(x / 2, y, width, height);
ball.setFilled(true);
ball.setColor(Color.cyan);
return ball;
}
/*
* private GImage backgroundDraw(String a) { GImage back = new GImage(a);
* return back; }
*/
private void touch(GOval[] ball) {
for (int b = 0; b <= 3; b++) {
for (int c = 0; c <= 3; c++) {
if ((b != c && ball[b].getX() - ball[c].getX() <= ball[b].getWidth()) && (ball[b].getY() - ball[c].getY() <= ball[b].getHeight())) {
SPEED[b] *= -1;
SPEED[c] *= -1;
}
}
}
}
}