Comunidad de diseño web y desarrollo en internet online

cómo se puede detectar el orden de colisión-una pista please

Citar            
MensajeEscrito el 24 Mar 2008 07:29 am
Tengo una duda ( si no no estaría aquí :? ):

cómo puedo detectar el orden en el que se ha producido una acción?

os pongo sobre el caso para explicarme mejor...
llegado un punto voy a hacer una suma... en este caso... el orden de los factores sí que altera el resultado... cómo puedo saber qué estoy sumando en primer lugar y en segundo lugar...
aquí va el ejemplo explicado más claramente:

tengo dos movieclips...
cada uno de ellos chocará con un tercer movieclip...
necesito localizar el orden de choque para que después ocurra una tercera acción...


uno_mc --- hitTest --- tercer_mc
dos_mc ---hitTest--- tercer_mc

if((uno_mc.hitTest(tercer_mc) y (dos_mc.hitTest(tercer_mc))){
entonces cambian los colores de otros mcs (cuarto y quinto)
}

if((dos_mc.hitTest(tercer_mc)) y (uno_mc.hitTest(tercer_mc))){
entonces ocurre otra cosa
}
´
he probeado con muchas cosas, con variables globales, con if, con switch, con variables locales... qué tengo que usar para diferenciar el orden? :shock:

pd.: no pido que me lo hagáis, sólo una pista para saber qué es lo que debo usar ¿un array? ¿un if? ¿una variable global? ¿un lápiz? ¿una naranja? me estoy volviendo turulata...
:crap: :oops:

Por stop

25 de clabLevel



Genero:Femenino  

msie
Citar            
MensajeEscrito el 24 Mar 2008 10:12 am
Lo único que tienes que hacer es modifcar el nombre de una variable, por ejemplo en _root. Si mc1 contacta con mc3, le cambias el valor a 1. Si es mc2 el que lo hace, lo cambias a 2 (todo esto, claro, si la variable vale 0).

Código :

if(uno_mc.hitTest(tercer_mc)){ 
if(ha_chocado==0){
ha_chocado=1;
}
}else if (dos_mc.hitTest(tercer_mc)){
if(ha_chocado==0){
ha_chocado=2;
}
}

Por mcapu

181 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 Mar 2008 10:55 am
lo siento mcapu... he probado la solución que me das, por cierto, muchas gracias por responder, pero...

el problema radica en que los dos movieclips van a chocar sí o sí con el tercer movieclip... y yo lo que quiero es identificar el orden del choque...
para...
en caso de que el orden sea diferente... realizar acciones diferentes...


la idea que me diste ya la había realizado y me sirve para identificar que se ha chocado en uno u otro caso con el tercer movieclip...

¿tienes alguna idea más? ¿alguien tiene alguna idea más?

Por stop

25 de clabLevel



Genero:Femenino  

msie
Citar            
MensajeEscrito el 24 Mar 2008 10:57 am
Claro, cuando quieras saber cuál ha chocado, lo único que tienes que hacer es comprobar el valor de la variable (puesto que van a chocar seguro). Si es uno, pues será mc1; si es 2, mc2.
PD: El código que he puesto va en algo que se repita, por ejemplo un EnterFrame ;)

Por mcapu

181 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 Mar 2008 11:13 am
¡vaya mcapu! creo que no te estoy entendiendo o que yo me explico muy mal (que no lo dudo)...

hice la comprobación, pero eso es algo que ya sé que ocurre...

en la comprobación final tengo que poner:

si hachocado=2 entonces que se haga esto
y
si hachocado=1 entonces que haga esto otro...

lo que pasa es que no son excluyentes en el orden... tal y como lo hemos expresado da igual el orden en el que se haga, mientras se haga... la consecuencia será la misma si se llega a 1 y a 2 o a 2 y a 1...
el choque con los dos sí que se va a producir siempre... sólo que necesito registrar el orden en que eso ocurra y cambiar el nombre de la variable no me funciona porque siempre se va a cambiar...
¿cómo puedo registrar el orden?

Por stop

25 de clabLevel



Genero:Femenino  

msie
Citar            
MensajeEscrito el 24 Mar 2008 11:15 am
matizo otra vez:

la comprobación final será:

si ha chocado uno y ha chocado dos entonces ocurre esto
si ha chocado dos y ha chocado uno entonces ocurre esto otro

el orden... registrar el orden... (snif!)

Por stop

25 de clabLevel



Genero:Femenino  

msie
Citar            
MensajeEscrito el 24 Mar 2008 11:37 am
Ah, vale. Creo que ya te entiendo. Quieres que la consecuencia se realice cuando choque el segundo, ¿no? Y además saber cuál es el primero. Te entendí mal al principio. Pensando un poco, sale esto:

Código :

ha_chocado = new Array(0, 0, 0);
_root.onEnterFrame = function() {
   if (uno_mc.hitTest(tercer_mc)) {
      if (ha_chocado[0] == 0) {
         ha_chocado[0] = 1;
      }
      ha_chocado[1] = 1;
   }
   if (dos_mc.hitTest(tercer_mc)) {
      if (ha_chocado[0] == 0) {
         ha_chocado[0] = 2;
      }
      ha_chocado[2] = 1;
   }

   if (ha_chocado[1] == 1 && ha_chocado[2] == 1) {
      trace("El primero que chocó fue el "+ha_chocado[0]);
      delete (this.onEnterFrame);
   }
};

Por mcapu

181 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 Mar 2008 11:46 am
mcapu!!! te quierooooo!!! muchísimas gracias!!! funcionó!!!

me estaba volviendo un poco tonta... y resulta que después de todo era con un array... en fin... creo que cuando pasé por esa solución la cabeza ya se me había puesto del revés :lol:

muchísimas gracias de nuevo!!! :love:

Por stop

25 de clabLevel



Genero:Femenino  

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.