Hej, w mojej grze Ping Pong po przegranej przez gracza rundzie jego deska i piłka dziwnie się zachowują.
Filmik: http://www.dailymotion.com/video/k4lCGNZYe53XNF3c7jz po 18 sekundzie ukazane
Metoda odpowiedzialna za detekcję kolizji:
Runnable r1 = new Runnable() {
public void run() {
try {
while (true) {
board.pPaddle.setBounds(board.p.getX(), board.p.getY(), 10, 50);
board.aiPaddle.setBounds(board.a.getX(), board.a.getY(), 10, 50);
board.ball.setBounds(board.b.getX(), board.b.getY(), 10, 10);
if (getY() < 1) { //ceiling
y = 2;
speedY = 1.11 + local.nextDouble() + 0.11;
} else if (getY() > 261) { //floor
speedY = -speedY;
}
if (board.ball.intersects(board.pPaddle)) { //piłka uderza w gracza
direct = local.nextInt(3);
if (direct > 1) {
speedY = local.nextInt(3) + 0.11
+ local.nextDouble();
} else {
speedY = -local.nextInt(3) + local.nextDouble();
}
speedY = local.nextInt(3) + 0.11;
speed = -speed;
//w kilku powyższych linijkach jest błąd, ale gdzie?
} else if (board.ball.intersects(board.aiPaddle)) { //piłka w kompjuter
direct = local.nextInt(3);
if (direct > 1) {
speedY = local.nextInt(3) + 0.11
+ local.nextDouble();
} else {
speedY = -local.nextInt(3) + local.nextDouble();
}
speed = -speed;
speedY = -speedY;
}
x += speed;
y += speedY;
board.repaint();
Thread.sleep(10L);
board.checkWin();
}
}catch(InterruptedException e){
}
}
};
}
I tutaj print() z tego co się dzieje z prędkościami piłki, gdy utyka w desce:
java.awt.Rectangle[x=4,y=190,width=10,height=50] X4 Y190 speedY 0.11 speedX 1.5
java.awt.Rectangle[x=4,y=190,width=10,height=50] X4 Y190 speedY -0.89 speedX -1.5
java.awt.Rectangle[x=4,y=190,width=10,height=50] X4 Y190 speedY -1.89 speedX 1.5
java.awt.Rectangle[x=4,y=190,width=10,height=50] X4 Y190 speedY -0.89 speedX -1.5
Jakieś pomysły? Mogę podrzucić cały kod programu.