Comunidad de diseño web y desarrollo en internet online

Dudas con hittest

Citar            
MensajeEscrito el 03 Ene 2007 10:49 am
Hola wenas , tengo algunas dudas respecto a hitTest, existe alguna forma de referirse a todos los movieclips de una pelicula sin tener que nombrarlos 1 a 1?, por ejemplo si tengo una funcion que crea unos MC llamados Hg, como puedo hacer que se paren quando xoquen entre ellos?

Agradeceria alguna ayuda, gracias!

Por Nathot

10 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Ene 2007 11:42 am
Existen muchas maneras.
Una sencilla es crear un array de MC´s y usar un doble bucle en la función donde pruebas el hiTest entre movieclips.
Supongamos 6 MCs ya instanciados de nombres:
"ese", "esteotro", "unomas", "otromas", "este" , "ultimo" .
Crear array al principio:

Código :

arr_mcs = [ese, esteotro, unomas, otromas, este, ultimo] ;
Ahora también se llaman ( son alias) :
arr_mcs[0], arr_mcs[1], arr_mcs[2], arr_mcs[3], arr_mcs[4] y arr_mcs[5].

Código :

function chocan(mcs){
  for (n=0; n<mcs.length; n++){
     for (m=n+1; m<mcs.length; m++){
        if(mcs[n].hitTest(mcs[m])){
          mcs[n].stop();
          mcs[m].stop();
        }
     }
  }
}

llamada con el nombre del array de MC´s a comprobar:

Código :

chocan(arr_mcs);
y efectuará las 15 comprobaciones necesarias en este ejemplo y deteniendo los mc que chocan.

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 03 Ene 2007 12:18 pm
Puedo poner dentro de arr_mcs movieclips del tipo ["Hg"+i]?, si es asi seguiria siendo la misma la funcion chocan (mcs)?






Gracias por la ayuda!

Por Nathot

10 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Ene 2007 12:36 pm
Si, un array de MC,s lo que que identifica es la ruta general del objeto.
Aunque si creas MC,s con enumeración lo mejor seria que los fueras asignando al array al crearlos:
arr_mc[i]= Create o duplicate MC....
Ten también en cuenta que ["Hg"+i] ya es un elemento de un array de nombres de MC. Usa trace(["Hg"+i]) y lo verás.
Y sí, la función es la misma.....pasa cualquier array a la función y dentro de esta ( y solamente dentro) el array se llama mcs[]

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

msie
Citar            
MensajeEscrito el 03 Ene 2007 12:54 pm

Teseo escribió:

Si, un array de MC,s lo que que identifica es la ruta general del objeto.


De modo que debo especificar la ruta en cada objeto?,

probe de utilizar como ruta _root.["Hg"+i].hip

pero no me funcionaba, ai alguna razon por la que sea incorrecto?

(hip seria un MC dentro de ["Hg"+i])

Por Nathot

10 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Ene 2007 02:18 pm
Bien, si querés usar el +i tenés que llenar el Array con un loop:

Código :

for (i = 0; i < numObjetos; i++) {
arr_mc[i] = _root["Hg" + i];
}


Hay que tener en cuenta que numObjetos va a ser el´número de clips que se almacenen en el array y que i debe ser igual a 0 si o si. Esto se debe al modo en el que funcionan los arrays. Si no tenés ningún clip llamado Hg0, crealo o usá este código (que no probé pero que debería funcionar):

Código :

for (i = 0; i < numObjetos; i++) {
arr_mc[i] = _root["Hg" + (i + 1)];
}

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie
Citar            
MensajeEscrito el 03 Ene 2007 03:18 pm
pero los MCs k digo yo, los creo cada vez que pulso el espacio:

tengo una funcion que se ejecuta cada vez que presiono la tecla espacio, en esta funcion ago un attach movie a una instance llamada tmp, y a esta instance le defino la funcion moveclip que hace que cada vez que una de las piezas creadas tenga sus propiedades (velocidad, cada vez que xoca contra las paredes s para etc...) pero quando detecto el movimiento entre 2 objetos de estos, tengo 1 problema, no se como hacer referencia al objeto que acaba de xocar.


si scribo:

this.hau.xoc.hitTest(this.hau.xoc)

me detecta cuando xocan 2 MC dentro de hau y dentro de this llamados xoc, pero estos objetos que xocan solo pertenecen a this(me refiero a que el siguiente objeto creado solo interaccionara consigomismo(ademas en este caso el xoque siempre seria verdadero)), no existe ninguna forma de referirse absolutamente a todos los MC's de la pelicula que tengan el mismo nombre? (xoc)

se que es dificil de explicar, si puedo despues os posteo el script a ver si asi entendeis mejor lo que kiero decir.

Por Nathot

10 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 03 Ene 2007 08:15 pm
Cada vez que crees un MC al que tengas que controlar el choque:

this.CreateMovieClip( xoc,i ) o duplicate o attach...
es igual el nombre que le asignes, crea un alias anteponiendo a esa instrucción una igualdad de asignación:
clip_xoc[i] = this.CreateMovieClip( xoc,i ) o duplicate o attach...
y si ya la tienes asignada de otra manera, dobla la igualdad:
clip_xoc[i] = ["hg"+i] = ruta.CreateMovieClip( lo que sea.xoc, nivel ) o duplicate o attach...
que creará una doble referencia;
Antes tendrás que haber creado el array :
clip_xoc=[];
Ahora puedes comprobar todos los choques con:
chocan(clip_xoc);
Si necesitas comprobar un choque específico:
nuevo_array_xoc=[clip_xoc[3], clip_xoc[8]];
chocan (nuevo_array_xoc);

eso comprobará si hay contacto entre el clip 3 y el clip 8

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 03 Ene 2007 10:35 pm
Muchissimas gracias por la ayuda, espero que me sirva , i no tener k daros la tabarra con mis preguntas de principiante xDDDD

Gracias a todos!

Por Nathot

10 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 04 Ene 2007 10:04 am
Comprendo la teoria, pero no se como aplicarlo a mi script. os lo posteo a continuacion a ver si me podeis ayudar.

Código :

on(keyPress "<Space>") {creaclip.call()}

este script esta en un boton de forma que al presionar el espacio se active la funcion.

el siguiente codigo esta en MC llamado mc_control

Código :

onClipEvent(enterFrame){
function(){ 
creaclip(); 
};

function creaclip(){
i=_root.getNextHighestDepth();
clip_xoc[i]=tmp=_root.attachMovie
("Lm","Lm"+i,i);

tmp.onEnterFrame=Moveclip;
tmp.repe=0;
tmp._x=240;
tmp.movd=30;
tmp.move=30;
tmp.vely=3;
tmp.Lcom.stop();
}
stop();}


i el siguiente en el primer frame de mc_control

Código :


function Moveclip() {
this._y+=this.vely 

if(puja==1){
if(this.parat==false){
this.Lcom.gotoAndStop(2);}}

if(puja==2){
if(this.movd==30){
if(this.parat==false){
this.Lcom.gotoAndStop(3);}}
}

if(puja==3){
if(this.parat==false){
this.Lcom.gotoAndStop(4);}
}

if(puja==0){
if(this.movd==30){
if(this.parat==false){
this.Lcom.gotoAndStop(1);}}
}

if(Key.isDown(Key.RIGHT))
{this._x= this._x + this.movd}

if (Key.isDown(Key.LEFT))
{ this._x = this._x - this.move}

if (this.hitTest(_root.dreta))
{this.movd= 0;}
else{this.movd = 30}

if (this.hitTest(_root.esquerra))
{this.move= 0;}
else{this.move = 30}

if(this.hitTest(_root.inferior))
{this.vely=0;
this.movd = 0; 
this.move = 0;
this.parat=true;
_root.Keys.gotoAndStop(1);
}
else{this.parat=false;}
}

Por Nathot

10 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Ene 2007 10:52 pm
Hernan , en tu post creo k ay un error, al final consegui acer-lo , sin embargo para que el bucle funcione, nececitas declarar primero el array

Código :

arr_mc=[]


al menos a mi me funciono asi.

Por Nathot

10 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 08 Ene 2007 01:16 pm
Si, me había olvidado de declararlo (pero no sabía que si no lo declaraba no funcionaba).

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie

 

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