Foros del Web » Programando para Internet » Javascript »

Detectar cuando se cruzan dos div's

Estas en el tema de Detectar cuando se cruzan dos div's en el foro de Javascript en Foros del Web. Buenas, No consigo sacarlo, lo explico para ver si alguien me puede ayudar. Estoy haciendo un pequeño jueguecillo muy simple que tiene un div fijo ...
  #1 (permalink)  
Antiguo 30/04/2013, 05:08
 
Fecha de Ingreso: mayo-2012
Ubicación: Valencia
Mensajes: 67
Antigüedad: 12 años
Puntos: 0
Pregunta Detectar cuando se cruzan dos div's

Buenas,

No consigo sacarlo, lo explico para ver si alguien me puede ayudar.
Estoy haciendo un pequeño jueguecillo muy simple que tiene un div fijo en el medio de la pantalla y uno pequeño dentro que lo voy moviendo con las flechas del teclado.
Luego por javascript voy generando unos más pequeños aleatoriamente para que el otro los recoja.

Mi problema es que no consigo sacar exactamente cuando se cruzan los dos cuadros.
Todo lo demás(generarlos, mover, etc) ya funciona.

Esta es la función que ejecuto en un setInterval() cada muy poco para comprobar si los dos cuadros se están tocando.

Código:
function comprobar() {
	swx = false;
	swy = false;
	//POSICION ACTUAL DEL CUADRO QUE SE MUEVE
	var fijo = document.getElementById("mov");
	var fijoy = parseInt(fijo.style.top, 10);
	var fijox = parseInt(fijo.style.left, 10);
	//POSICION ACTUAL DEL CUADRO RANDOM
	var random = document.getElementById("random");
	var randomy = parseInt(random.style.top, 10);
	var randomx = parseInt(random.style.left, 10);
	
	for (x=fijox;x<=(fijox+20);x++) {
		for (y=randomx;y<(randomx+20);y++) {
			if (x == y) {
				swx = true;
			}
		}
	}
	for (x=randomy;x<=(randomy+20);x++) {
		for (y=fijoy;y<=(fijoy+20);y++) {
			if (x == y) {
				swy = true;
			}
		}
	}
	
	
	if(swx==true && swy==true) {
		crear();
	}
	
}
Los 2 cuadros son de 20x20 pixels. Como se ve en el código, obtengo las posiciones de los cuadros e intento comparar las posiciones horizontal y vertical y si ambas se cruzan en algún punto llamo a crear(); para generar otro cuadro aleatorio.

En el eje x me funciona perfectamente. Pero tengo problemas en el eje y. Paso por encima del cuadro que tengo que recoger y me cuenta como si lo tocara, y otras veces paso por en medio y no cuenta.

Alguna idea?
Gracias.
  #2 (permalink)  
Antiguo 30/04/2013, 07:38
 
Fecha de Ingreso: mayo-2012
Ubicación: Valencia
Mensajes: 67
Antigüedad: 12 años
Puntos: 0
Respuesta: Detectar cuando se cruzan dos div's

en mi código intento comparar los dos ejes (x,y) para saber cuando pasa por encima.
No hace falta que sea esta la forma, si existe otra forma de saber cuando 2 divs se cruzan me sirve también.
  #3 (permalink)  
Antiguo 30/04/2013, 19:39
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años
Puntos: 34
Respuesta: Detectar cuando se cruzan dos div's

para que son los for esos?

para comprobar si se cruzan se me ocurre agarrar cada vertice de uno de los divs y comprobar si se encuentra dentro del otro, si da positivo es que se cruzan
  #4 (permalink)  
Antiguo 02/05/2013, 02:48
 
Fecha de Ingreso: mayo-2012
Ubicación: Valencia
Mensajes: 67
Antigüedad: 12 años
Puntos: 0
Respuesta: Detectar cuando se cruzan dos div's

Cita:
Iniciado por patriciomase Ver Mensaje
para que son los for esos?

para comprobar si se cruzan se me ocurre agarrar cada vertice de uno de los divs y comprobar si se encuentra dentro del otro, si da positivo es que se cruzan
Con los for, había conseguido de forma chapucera comprobar los ejes horizontal y vertical si la anchura y altura de los dos cuadros coincidian en algún punto y si en ambos coincide algún punto es que se tocan. Pero el eje vertical no me funciona nada bien ya que pasando por encima hace como si lo tocara y a veces pasando por en medio del otro cuadro no lo detecta.

Podrías ponerme un ejemplo de como hacer lo de los vértices?
Gracias.

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:57.