Olá amigos,
Eu tenho estudo um pouco sobre Java2D e uma das dúvidas que eu tinha era justamente sobre a colisão entre esferas, comecei estudo algumas dicas dadas nesse tópico e busquei mais algumas coisas na internet, pati do conceito geométrico de que duas bolas colidem quando a soma dos raios é igual ou menor que a distância dos centros dessas bolas, partindo desse princípio eu crie uma classe Bola e nela criei um método que calcula a distância entre o centro das duas bolas.
private int calculaDistanciaEntrePontos(PontoMedio p1, PontoMedio p2) {
double resp = 0;
double distX = Math.abs(p1.getX() - p2.getX());
double distY = Math.abs(p1.getY() - p2.getY());
resp = Math.sqrt((Math.pow(distX, 2) + Math.pow(distY, 2)));
return (int) resp;
}
Depois criei um método que detecta a colisão
public boolean detectaColisao(Bola bola) {
double soma = (this.getRaio() + bola.getRaio());
double aux = this.calculaDistanciaEntrePontos(pCentral, bola.getPCentral());
if (soma == aux || aux < soma) {
return true;
} else {
return false;
}
}
E na Thread do meu JPanel eu fiz da seguinte maneira
public void run() {
super.run();
while (true) {
//double teste = bola.calculaDistanciaEntrePontos(bola.getPCentral(), bola2.getPCentral());
if(bola.detectaColisao(bola2)){
bola.setVelocidadeX(-bola.getVelocidadeX());
bola2.setVelocidadeX(-bola2.getVelocidadeX());
}
if (!pause) {
gameUpDate();
repaint();
}
try {
Thread.sleep(1000 / UPDATE_RATE);
} catch (InterruptedException ex) {
}
}
}
Sei que é um exemplo bem simplório e ainda precisa de muito trabalho em cima dele, mas achei legal compartilhar com os colegas
Abçs
Marcelo Logan