Comunidad de diseño web y desarrollo en internet online

eliminar todos los movieclips menos el que yo quiero

Citar            
MensajeEscrito el 25 Ene 2009 05:30 pm
Hola a todos y gracias de antemano los que me puedan ayudar.

Mi problema es el siguente:

He creado varios movieclips que recogen datos de un array que recoge datos de un PHP. Hasta aquí ningun problema, cada movieclip recoge sus datos.

Código :

for (j=0; j<=maxim_camps; j++) {
      

      attachMovie("missatge","missatge"+j,this.getNextHighestDepth(),{_x:310, _y:((j+1)*35)});

      this["missatge"+j].de_usuari_missatge_txt.text = de_usuari_array[j];
      this["missatge"+j].titol_missatge_txt.text = titol_array[j];
      this["missatge"+j].estat_missatge_txt.text = estat_array[j];
      this["missatge"+j].data_hora_missatge_txt.text = data_array[j];
}


Pero lo que ahora quiero hacer y no se como es que cuando haga clic en uno de estos movieclips, se eliminen todos los demas. Habia pensado en un for indicándole el que no quiero borrar o algo asi, pero no tengo ni idea. Si alguien sabe cómo, se lo agradeceré. Muchas gracias!

Por hiulit

Invitado



 

firefox
Citar            
MensajeEscrito el 25 Ene 2009 07:11 pm
En el for donde creas los clips, puedes rellenar un Array con los clips.

Después creas una función eliminar(clip), que reciba como parámetro el clip que no quieres borrar, recorres la matriz, y eliminas todos los elementos != clip.

Por esedeerre

132 de clabLevel



 

MadRid

opera
Citar            
MensajeEscrito el 25 Ene 2009 09:36 pm
¿Y me podrías poner un ejemplo de eso que me explicas?

Gracias!

Por hiulit

Invitado



 

firefox
Citar            
MensajeEscrito el 25 Ene 2009 11:11 pm
puedes hacer lo que dice esedeerre y tambien puedes usar el "for .. in" en el scope que estan tus movieclips

hay muchos ejemplos de estos conceptos en Clab solo buscalos.

Saludos.

Por paranoio

75 de clabLevel



 

Mexico

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:27 am
¿qué es el "scope"?

y ya los he buscado ya,pero no he encontrado nada... si tienes algun ejemplo te lo agradeceria, o que me explicarais lo que han comentado que no lo entiendo...

Por hiulit

Invitado



 

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:38 am
Holas

Código ActionScript :

function eliminartodos_menos( clip:MovieClip ):Void
{
     var scope:MovieClip = clip._parent;
     for( var i in scope )
     {
          if( scope[i] != clip )
          {
               scope[i].removeMovieClip();
          }
     }
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:45 am
Holas de nuevo, esta es la funcion modificada para eliminar todos los clips que su nombre inicie con "missatge", para no eliminar algo que no queremos eliminar. :D

Código ActionScript :

function eliminartodos_menos( clip:MovieClip ):Void 
{
   var scope:MovieClip = clip._parent;
    for( var i:String in scope ) 
    { 
      if( scope[i] != clip && i.substr(0,8) == "missatge" ) 
      { 
         scope[i].removeMovieClip(); 
      }
   }
}


Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:47 am
Y utilizando mi codigo

Código :

for (j=0; j<=maxim_camps; j++) {
      

      attachMovie("missatge","missatge"+j,this.getNextHighestDepth(),{_x:310, _y:((j+1)*35)});

      this["missatge"+j].de_usuari_missatge_txt.text = de_usuari_array[j];
      this["missatge"+j].titol_missatge_txt.text = titol_array[j];
      this["missatge"+j].estat_missatge_txt.text = estat_array[j];
      this["missatge"+j].data_hora_missatge_txt.text = data_array[j];
}


¿cómo quedaría este código que me acabas de decir?

no me tomeis por tontito o algo eh, jeje, pero hay cosas que aún no entiendo...

Por hiulit

Invitado



 

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:51 am
Lo que quiero es que clicando a uno de esos this["missatge"+j] se borren los demás this["missatge"+j].

Algo así como:

Código :

function eliminartodos_menos( clip:MovieClip ):Void 
{ 
     var scope:MovieClip = clip._parent; 
     for( var i in scope ) 
     { 
          if( scope[i] != clip ) 
          { 
               scope[i].removeMovieClip(); 
          } 
     } 
} 

this["missatge"+j].onPress = function() {
eliminartodos_menos();
}


Pero rellenando la función eliminartodos_menos con mis parámetros ¿no?

Por hiulit

Invitado



 

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:53 am
Hola LongVie, gracias por responder!

Pero lo que yo quiero es justamente al revés, no que se eliminen todos los clips que empiezen por "missatge" sinó que se borren todos los que llamen "missatge4", por ejemplo.

Que cuando yo clique en "missatge4" se eliminen los "missatge0", "missatge1", 2 ,3, 5, 6, etc... menos el que he clicado...

Por hiulit

Invitado



 

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:53 am
U_U no te voy a tomar por tontito, pero las "funciones" son conceptos basicos, mi funcion elminatodos_menos(clip), elimina todos los clips, menos el clip pasado como parametro, no hay mas ciencia, si eso ya lo sabias, entonces tu problema es con el operador de acceso "this" de ese si puedes encontrar mucho en clab, lo explican muy bien, usa el buscador. :D

Código ActionScript :

for (j=0; j<=maxim_camps; j++) {
      

      attachMovie("missatge","missatge"+j,this.getNextHighestDepth(),{_x:310, _y:((j+1)*35)});
      this["missatge"+j].de_usuari_missatge_txt.text = de_usuari_array[j];
      this["missatge"+j].titol_missatge_txt.text = titol_array[j];
      this["missatge"+j].estat_missatge_txt.text = estat_array[j];
      this["missatge"+j].data_hora_missatge_txt.text = data_array[j];
      this["missatge"+j].onPress = function() {
            eliminartodos_menos(this);}
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:59 am
He buscado mucho, de verdad, llevo un par de días buscando por la red y no he encontado nada claro.

Tu propuesta es lo mejor que he encontrado hasta el momento, aunque aún no la entiendo muy bien. Me pondré a hacer pruebas y ya te comentaré (si no te molesta).

Por hiulit

Invitado



 

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:59 am
Aun no los has pillado bien:

SI (el clip a eliminar) es diferente de (el clip que no se quiere eliminar) Y (los primeros 8 caracteres de su nombre) son iguales a (missatge)

Código ActionScript :

if( scope[i] != clip && i.substr(0,8) == "missatge" )


elimina_a_todos_menos( a mi )

Código ActionScript :

eliminartodos_menos(this);


¿Porque es necesario validar los primeros 8 caracteres de su nombre?

Porque For( var i in scope ) recorre todos los lementos del scope, supon que tienes por ahi un clip con un logo, y tambien tienes un clip con una galeria de imagenes, y cosas asi, las eliminara si no se valida que es lo que realmente se quiere eliminar

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Ene 2009 08:03 am
No me molesta :D, yo estoy deacuerdo con tigo, pruebalos, estudialos, veras que cuando lo entiendas, sabras que no es tan dificil como pensaste, es puro ingenio, esto no viene en los cursos de flash, no hay que buscar, hay que ingeniar. Suerte :D

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Ene 2009 08:45 am
vale, la función la he entendido, pero no la he podido integrar, he estado probando y no funciona...

yo he probado algo así como:

Código :

function eliminartodos_menos(clip) {
scope = this["missatge"+i];
for( i in scope ){
if( scope[i] != clip && i.substr(0,8) == "missatge" ) {
scope[i].removeMovieClip();
}
}
}


Tambien he probado de cambiar el "clip" por "this" pero me da error...

Por hiulit

Invitado



 

firefox
Citar            
MensajeEscrito el 26 Ene 2009 08:52 am
Aun no has entendido la funcion, dejala tal cual como la escribi, veras que funciona, no la cambies, la diseñe especficamente para tu situacion, ya te habia puesto como integrarla U_U, te dejo aqui todo el script, pruebalo asi como te lo dejo aqui, confia en mi.

Código ActionScript :

for (j=0; j<=maxim_camps; j++) { 
      attachMovie("missatge","missatge"+j,this.getNextHighestDepth(),{_x:310, _y:((j+1)*35)}); 
      this["missatge"+j].de_usuari_missatge_txt.text = de_usuari_array[j]; 
      this["missatge"+j].titol_missatge_txt.text = titol_array[j]; 
      this["missatge"+j].estat_missatge_txt.text = estat_array[j]; 
      this["missatge"+j].data_hora_missatge_txt.text = data_array[j]; 
      this["missatge"+j].onPress = function() { 
            this._parent.eliminartodos_menos(this);
      };
}

function eliminartodos_menos( clip:MovieClip ):Void  
{ 
   trace("Este clip se salvo: " + clip);
   var scope:MovieClip = clip._parent; 
    for( var i:String in scope )  
    {  
      if( scope[i] != clip && i.substr(0,8) == "missatge" )  
      {  
         trace("Este clip fue eliminado: " + scope[i]);
         scope[i].removeMovieClip();  
      } 
   } 
} 

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 26 Ene 2009 09:20 am
Vale, pues no la había entendido... :crap:

Y la verdad sigo sin entenderla mucho... Funciona, pero no la entiendo..

Cuando tengas tiempo y si no te es mucha molestia.... ¿Te importaría explicarmela un poco detallada?

Es que me gustaría entederla y me esfuerzo y no hay manera...



¡¡¡GRACIAS igualmente!!! :D

Por hiulit

Invitado



 

firefox
Citar            
MensajeEscrito el 26 Ene 2009 10:02 am
OK, no es molestia :D

te explico aqui la funcion con pseudocodigo y comentarios

Código ActionScript :

   /*clip es un MovieClip, como sabras, cada MovieClip, tiene un papa, osea, un MovieClip padre 
     que es quien los contiene, y el super papa de todos se llama "_root", si habias escuchado hablar de el no?
     bueno, entonces clip tiene hermanos; sus hermanos, son hijos de su papa, obvio; en el caso que tu 
     planteas, un Señor, que llamaremos "scope", tiene (maxim_camps) de hijos, cada hijo lo ha nombrado
     "missatge" mas el momento en que nacio, osea, el cuarto hijo se llama "missatge4" y el treintavo hijo
     se llama "missatge30" y asi sucesivamente, bueno, cada hijo tiene una maldicion, que si lo tocan, se
     mueren sus hermanos, osea, se mueren todos los hijos de su papa(scope) excepto el que ha sido tocado, 
     su papa tambien tiene otros hijos con otras esposas, tiene otros hijos llamados "logo", "header", "clip_usado"
     pero, a esos hijos no les afecta la maldicion. la madicion se llama "eliminartodos_menos" y recibe como 
     parametro, el hijo que fue tocado, hijo que no morira a causa de la maldicion. Como te explique
     todos lo hijos que deben morir por la maldicion tienen un nombre que incia con las 8 letras "missatge", los que
     no cumplan con esa regla, no moriran a causa de la maldicion.
   */

//FUNCION Elimina_a_todos_menos( (a este)MovieClip )
function eliminartodos_menos( clip:MovieClip ):Void   
{  
   //clip es el hijo maldito
   // (scope) es igual a (el PAPA de el hijo maldito )
   var scope:MovieClip = clip._parent;
   // POR CADA (hijo) PERTENECIENTE A (scope)
    for( var i:String in scope )   
    { 
      // SI (ese hijo de scope) ES DIFERENTE DE (el hijo maldito) Y (el nombre) ES IGUAL A (missatge)
      if( scope[i] != clip && i.substr(0,8) == "missatge" )   
      {   
         //Debe morir, muajajaja
         // (ese hijo de scope) ES REMOVIDO
         scope[i].removeMovieClip();   
      }  
   }  
}

Ahora veamos el nacimiento de los chamacos

Código ActionScript :

//Es señor scope estaba muy activo esa noche
for (j=0; j<=maxim_camps; j++) {  
      //Aqui this, se refiere a el PAPA de todos "los hermanos missatge"
      attachMovie("missatge","missatge"+j,this.getNextHighestDepth(),{_x:310, _y:((j+1)*35)});  
      this["missatge"+j].de_usuari_missatge_txt.text = de_usuari_array[j];  
      this["missatge"+j].titol_missatge_txt.text = titol_array[j];  
      this["missatge"+j].estat_missatge_txt.text = estat_array[j];  
      this["missatge"+j].data_hora_missatge_txt.text = data_array[j];  
      //Aqui es donde los hijos de this(el señor scope de la otra funcion), adquieren la maldicion
      //(este hijo de scope) CUANDO ES TOCADO ENTONCES...
      this["missatge"+j].onPress = function() {  
            //todos mis hermanos mueren menos yo, soy tan infeliz.
            /*OJO, aqui this se refere a otro enfoque, onPress es una funcion dentro de un hijo missatge
              si dentro de esta funcion usamos this, this se refiere al dueño de la funcion, osea el hijo missatge,
              NO al papa, el señor scope.*/

            //Ejecutamos la funcion "eliminartodos_menos" la cual se encuentra en el nivel de mi padre, y me toma
            //a mi como su parametro, pues soy "el unico hermano missatge" que no debe morir.
            this._parent.eliminartodos_menos(this);
      };
} 


:D me he divertido. Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox

 

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