Ai pessoal estou com problemas na hora de tratar as colisões entre os objetos do meu jogo…
é o seguinte, o objetivo dos seguintes metodos era verificar as colisões objeto por objeto do arrayList animados
sendo que o objeto colidido, servira de referencia para a posicao do objeto que colidiu.
mas a colisão era pra ser tratada da seguinte maneira.
por exemplo:
objeto que colidiu entraria na condição de colisão pela esquerda, e o objeto colidido na condição de colisão pela direita
a colisão feita neste sentido.
----------------><---------------
se alguem puder testar e me ajudar eu agradeço.
este é o metodo responsavel por dizeeraos objetos em que posicao eles devem ficar apos as coliões:
[code] void colidiuCom(Animado colidido) {
Vetor outro = colidido.posicaoAnterior;
//colisão por cima
if(Math.round(posicao.posY+getAltura()-posicao.dY) <= Math.round(outro.posY-outro.dY)){
this.posicao.posY = outro.posY - this.getAltura();
}
//colisão por baixo
if(Math.round(posicao.posY-posicao.dY) >= Math.round(outro.posY+colidido.getAltura()+outro.dY)){
this.posicao.posY = outro.posY + colidido.getAltura();
}
//colisão pela esquerda
if(Math.round(posicao.posX+getLargura()-posicao.dX) <= Math.round(outro.posX-outro.dX)){
this.posicao.posX = outro.posX - this.getLargura();
}
//colisão pela direita
if(Math.round(posicao.posX-posicao.dX) >= Math.round(outro.posX+colidido.getLargura()-outro.dX)){
this.posicao.posX = outro.posX + colidido.getLargura();
}
}[/code]
este é o metodo que chama o metodo acima se hover colisão:
private void verificaColisoes() {
for (int i1 = 0; i1 < animados.size() - 1; ++i1) {
for (int i2 = i1+1; i2 < animados.size(); ++i2) {
if(animados.get(i1).getRetangulo().intersects(animados.get(i2).getRetangulo())){
animados.get(i1).colidiuCom(animados.get(i2));
animados.get(i2).colidiuCom(animados.get(i1));
}
}
}
}