Foros del Web » Programando para Internet » Javascript »

[Duda] Control de choque entre elementos DIV

Estas en el tema de [Duda] Control de choque entre elementos DIV en el foro de Javascript en Foros del Web. Hola, antes de nada, anticiparme a la ayuda y gracias por todos aquellos a los que me deis un empujoncito en el tema. Al tema: ...
  #1 (permalink)  
Antiguo 03/02/2010, 09:05
 
Fecha de Ingreso: febrero-2010
Mensajes: 39
Antigüedad: 14 años, 2 meses
Puntos: 2
[Duda] Control de choque entre elementos DIV

Hola, antes de nada, anticiparme a la ayuda y gracias por todos aquellos a los que me deis un empujoncito en el tema.

Al tema: Actualmente tengo este codigo (simplemente que shoot y enemy se generan aleatoreamente a tiempo de ejecucion)

Cita:
<div id="juego">
<div id="yourself" class="sprite"></div>
<div id="shoot" class="shoot"></div>
<div id="enemy" class="enemy"></div>
</div>
Como podeis comprovar se trata de la pantallita de un juego, contretamente de un mata marcianitos.

Tengo todo listo, los enemigos vajan a X velocidad, los disparos suben desde mi posicion (igual que los de los enemigos bajan por igual ...)

El echo esque no tengo ni idea de como controlar cuando un div (disparo contra enemigo) coincide con otro. O en otras palabras, cuando hay un choque
  • Los movimientos los hago desde Javascript (DOM) modificando los valores marginLeft y marginTop del div el cual contiene una imagen de background
  • Los movimientos se basan en un setTimeout que llama repetidamente a la funcion "mover" hasta que el div llega al limite del div "juego"
  • Los div (o capas) estan en float y absolute
  • Tanto los div "enemy" como los "shoot" tienen esa id concatenada con el numero actual de disparos / enemigos (enemy1,enemy2,enemy3 ... shoot1,shoot2,shoot3 ...)

Si necesitais mas informacion o codigo, no me improta en absoluto postearlo
  #2 (permalink)  
Antiguo 03/02/2010, 09:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: [Duda] Control de choque entre elementos DIV

Debes usar alguna funcion que detecte una colisión entre divs, por ejemplo buscando así por internet encontre esto http://jsfromhell.com/geral/hittest. La forma de buscarlo debe ser algo como "javascript hittest".
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 03/02/2010, 09:31
 
Fecha de Ingreso: febrero-2010
Mensajes: 39
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: [Duda] Control de choque entre elementos DIV

Gracias por responder tan rapido, ya habia visto por ahi alguna cosa parecida (con el tema del offstet), aunque no terminava de entender como debia hacer las comprovaciones, despues de leer el codigo lo tengo todo mucho mas claro.

Quiza me equivoco, pero viendo el ejemplo, siempre se necesita saber los 2 elementos que se quiere comprovar.

Entonces eso me plantea un problema:

El problema, segun lo que veo, esque aqui necesitas siempre recoger los 2 elementos y lanzar el hitTest, mientras que el unico elemento que tengo yo seguro, es cada div sobre si mismo.

Suponiendo que lanze el hitTest en cada vez que un enemigo se mueve, o que un disparo se mueve, no puedo recoger los elementos extgernos a ese propio enemigo o disparo, se cual es su ID por lo que puedo recoger ese elemento, pero no los otros que le rodean.

No se si me explico bien.. por asi decirlo, un enemigo que baja, no sabe en ningun momento cual es el disparo (o su id) que sube hacia el, entonces ahi se me plantea el problema.
  #4 (permalink)  
Antiguo 03/02/2010, 09:37
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: [Duda] Control de choque entre elementos DIV

Vamos a ver si te entendí. Si lo que te refieres a que uno de los divs no va a saber que algún otro div va a ser colisión, solo tienes que hacer un código que corra no dependiendo de los dos divs. O sea que ese código siempre corra, y así verifique si hay alguna colisión.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 03/02/2010, 09:50
 
Fecha de Ingreso: febrero-2010
Mensajes: 39
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: [Duda] Control de choque entre elementos DIV

Cita:
function moverDisparoEnem(shootLeft,shootTop,miid) {
var shooty = document.getElementById(miid);
shooty.style.visibility = "visible";
shooty.style.marginTop = shootTop + "px";
shooty.style.marginLeft = shootLeft + "px";

AQUI PONDRIA EL HITTEST

if (shootTop <= 500) {
setTimeout("moverDisparoEnem("+shootLeft+","+(shoo tTop+10)+",'"+miid+"')",40);
}else {
var juego = document.getElementById("juego");
juego.removeChild(shooty);
}
}
este es el codigo que se lanza para mover el disparo de un enemigo (de los cuales hay muchos por cierto...)

como se supone quie debo considerar los otros elementos si la propia funcion mueveDisparoEnem no recive tal informacion :S

(y no olvidemos que esto se esta ejecutando constantemente, unas cuantas veces por segundo...)
  #6 (permalink)  
Antiguo 03/02/2010, 09:51
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: [Duda] Control de choque entre elementos DIV

Bueno ahí es tu reto, de cómo hacerlo, te sugiero crear otra función y que dentro de esa funcion llamarla. O tal vez crear otra función con lo de hittest y esta correrla individualmente de esta función y que esta función reconozca los elementos divs.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: control, elementos
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 22:22.