Java - colisiones juego

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

colisiones juego

Publicado por flor (2 intervenciones) el 08/07/2020 22:44:56
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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;
}}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

colisiones juego

Publicado por Tom (1831 intervenciones) el 09/07/2020 11:32:53
No, no se te entiende muy bien.
Pero puedes usar el método getBounds() de tus objetos. que te devuelve un Rectangle.
Luego puedes ver si dos objetos intersectan con el método Rectangle.intersects(Rectangle)).

https://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#getBounds-java.awt.Rectangle-
https://docs.oracle.com/javase/8/docs/api/java/awt/Rectangle.html#intersects-java.awt.Rectangle-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

colisiones juego

Publicado por flor (2 intervenciones) el 10/07/2020 03:37:08
gracias tom! ya lo pude resolver!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar