Problema con colisiones

Cerrado
florht - 7 jul 2020 a las 23:34
Hola, buenas!
estoy teniendo problema con las colisiones en java tengo un personaje (Princesa prin), obstaculos (Obstaculo obs) y soldados (Soldado sol), cuando la princesa colisiona con los soldados o los obstaculos la princesa deberia perder una vida, mi logica era si el "X" de adelante de la princesa es igual a el "X" de adelante del soldado o obstaculo entonces pierde una vida...el problema es que hay veces en la que a la vista si "colisionan" pero no estaria perdiendo vidas, el tema es que la princesa se mueve a una velocidad de 5 mientras que los soldados a una velocidad de 1 y los obstaculos a una velocidad de 0,5, asi que hay veces que no se encuentran aunque como dije a la vista si...y deberia perder vidas.
espero que me hayan entendido a continuacion dejo parte del codigo espero que me puedan ayudar, les agradezco si se toman el tiempo de pensarlo y tirarme algo de luz!!

this.prin = new Princesa(150, 510, 80, 80);
this.iPuntos = Herramientas.cargarImagen("puntos.png");
this.fondo = Herramientas.cargarImagen("dia.png");
this.endGame = Herramientas.cargarImagen("gameover.png");
this.corazon = Herramientas.cargarImagen("vidas.png");

for (int i = 0; i < 3; i++) {
this.obstaculos.add(new Obstaculo(500 + 150 * i, 518, 60, 20, 0.5));
}
for (int s = 0; s < 3; s++) {
this.soldados.add(new Soldado(500 + 150 * s, 518, 40, 40, 1));
}
for (int i = 0; i < 3; i++) {
this.vidas.add(this.corazon);
}

this.puntos = 0;
this.vida=3;


------------------------------------------------------------------------------------------------------------------------------------------------------


public void colisionSoldadoyPrincesa()
{
for (Soldado sol : soldados)
{

if(((this.prin.getX()+this.prin.getAncho()/2==sol.getX()-sol.getAncho()/2)
&& (this.prin.getY()+this.prin.getAlto()/2> sol.getY()-sol.getAlto()/2))
||((this.prin.getY()+this.prin.getAlto()/2== (sol.getY()-sol.getAlto()/2)+2)
&& (this.prin.getX()-this.prin.getAncho()/2<=sol.getX()+sol.getAncho()/2)
&& (this.prin.getX()+this.prin.getAncho()/2>=sol.getX()+sol.getAncho()/2)))
{
this.restarVida();
this.vidas.removeLast();
break;
}}
}


public void colisionObstaculoyPrincesa()
{
for (Obstaculo obs : obstaculos)
{
if(((this.prin.getX()+this.prin.getAncho()/2==obs.getX()-obs.getAncho()/2)
&& (this.prin.getY()+this.prin.getAlto()/2> obs.getY()-obs.getAlto()/2))
||((this.prin.getY()+this.prin.getAlto()/2== (obs.getY()-obs.getAlto()/2)+2)
&& (this.prin.getX()-this.prin.getAncho()/2<=obs.getX()+obs.getAncho()/2)
&& (this.prin.getX()+this.prin.getAncho()/2>=obs.getX()+obs.getAncho()/2)))
{

this.restarVida();
this.vidas.removeLast();
break;
}}
}
Consulta también: