Estou tendo problemas para pensar em como fazer o tratamento das colisões do game que estou desenvolvendo, o jogo é o pong.
Eu tenho um método que me retorna se há ou não colisão, mas o problema está em desenvolver a lógica para descobrir de que lado vem a colisão. Isto por que estou testando o projeto como se houvesse duas bolas em ação, e as duas podem se rebater, e preciso saber em qual dos lados houve colisão, para efetivamente mudar a direção das bolas.
Este é o método que checa colisão:
public boolean checkCollisionTo(Sprite obj){
if(colisao == false){
if (x > obj.x+SIZE)
return false;
if (x+SIZE < obj.x)
return false;
if (y > obj.y+SIZE)
return false;
if (y+SIZE < obj.y)
return false;
return true;
}
return false;
}
Não sei se esta é a melhor forma de detectar uma colisão, mas preciso da ajuda de vocês.
Achei que tinha entendido, mas não entendi bem o que vocês quis dizer com traçar a reta da posição antiga até a atual do polígono… Não consigo enxergar seu raciocínio…
Criei um método que no momento da colisão calcula a distancia entre os centros dos polígonos, caso a distância em X seja maior, é uma colisão lateral, que eu verifico se é esquerda ou direita fazendo x1-x2 ou x2-x1, ou caso a distância seja maior em Y, e mesmo esquema pra verificar se é de cima ou em baixo…
Funciona quase perfeitamente, a não ser pelo caso em que a colisão por cima ou por baixo, os dois polígonos estão entrando um dentro do outro…