Java - Dectector de Colisiones 2D

 
Vista:
sin imagen de perfil

Dectector de Colisiones 2D

Publicado por Alberto (2 intervenciones) el 07/04/2014 10:34:24
Buenas,

Estoy realizando un proyecto de un juego sencillo en 2D, el mítico Arkanoid, ya saben el juego que consiste en romper ladrillos con una pelota.

Me funciona casi todo correctamente, pero estoy atascado en la colisión de la pelota con los ladrillos, es decir, en el momento del choque, debería de actuar como si fuese una pared, invirtiendo la dirección de la pelota, hasta ahí todo bien.

El problema me surge al saber si esa colisión se produce horizontal o verticalmente, ya que por ejemplo si la colisión con un ladrillo es por un lateral, debería invertir solamente la dirección del eje X, sin tocar el eje Y, y viceversa. No consigo hallar el código que me compruebe eso.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void detectarChoqueConLadrillos() {
		for (int i = 0; i < interfaz.grupoLadrillos.ladrillo.length; i++) {
			for (int j = 0; j < interfaz.grupoLadrillos.ladrillo[i].length; j++) {
				if (interfaz.grupoLadrillos.ladrilloExiste[i][j]) {
					if (getEllipse().intersects(
							interfaz.grupoLadrillos.ladrillo[i][j]
									.getRectangle())) {
						incY*=-1;
						incX*=-1;
						interfaz.grupoLadrillos.ladrilloExiste[i][j] = false;
					}
				}
			}
		}
	}

Del código:

-interfaz: sería el panel del juego
-grupoLadirillos: es una matriz de clase ladrillos
-ladrillo: pinta el ladrillo, con una posicion X e Y
-ladrilloExiste: matriz con las mismas dimensiones que grupoLadrillos, la uso para saber si ese ladrillo existe, y en caso negativo, no lo pinto.
-getEllipse(): devuelve una Ellipse2D.Double, tomando las coordenadas de la pelota.
-getRectangle(): devuelve un Rectangle2D.Double, tomando las coordenadas del ladrillo.
-incX: incremento de la posicion X de la pelota en cada iteración del hilo del juego.
-incY: incremento de la posicion Y de la pelota en cada iteración del hilo del juego.

Sino entienden algo del código pregunten, por favor.

Espero que alguien consiga ayudarme.

Gracias de antemano.
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

Dectector de Colisiones 2D

Publicado por UnoPorAhi (128 intervenciones) el 07/04/2014 20:24:26
if (getEllipse().intersects(interfaz.grupoLadrillos.ladrillo[i][j]
.getRectangle()))

Yo lo veo correcto. Algo se te está escapando en algún lado. Lo mejor es que depures y veas que es lo que está pasando en el momento de la colisión.

Un saludo,
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