[ Foro de Java ]

colision

07-Jul-2020 23:11
Invitado (flor)
0 Respuestas

buenas! soy muy principiante en la programación y mas aun en java, tengo un problema de colisión: tengo un personaje (Princesa prin) , obstáculos (Obstáculo obs) y enemigos (Soldado sol), al chocar la princesa con los obstaculos o soldados deberia perder una vida el problema es que en mi logica si el frente "X" de la princesa era igual a el frente del soldado o obstaculo  pasaria eso de perder una vida el tema es que no lo reporta siempre  entendi despues de varias horas que mi princesa se mueve a una velocidad de 5 mientras los soldados a una velocidad de 1 y los opbstaculos a una velocidad de 0,5 asi que hay momentos en los que pasan unos delantes de otros y nunca llega a ser igual esas "X"s . espero que me hayan entendido y me puedan resolver esta duda o guiar hacia donde deberia dirijir o en el peor de los caso (aunque no malo ni inutil) plantearme que deberia de iniciar de nuevo con los colisiones....muchas gracias!!
en lo siguiente pego parte del codigo:
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;
}}
}




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)