Problema com algoritimo de Colisão de objetos

3 respostas
nicolas_dias

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:

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();
        }
    }

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));                   
                }
            }
        }
    }

3 Respostas

nicolas_dias

existe alguma boa alma ai para me ajudar, se não entenderam o que eu quis dizer, me falem!!!

Marky.Vasconcelos

E o que acontece no lugar do que voce queria?

nicolas_dias

o problema foi resolvido…obrigado Marky.Vasconcelos pela boa intencao, vlw

Criado 16 de janeiro de 2013
Ultima resposta 17 de jan. de 2013
Respostas 3
Participantes 2