Comunidad de diseño web y desarrollo en internet online

Eliminar MC "attacheado"

Citar            
MensajeEscrito el 02 Nov 2011 06:10 pm
Hola! He creado una galeria con mc's cargados con attach y me gustaria saber como borrarlos pulsando un boton. He estado investigando y los metodos que recomiendan son unloadMovie y removeMovieClip...pero ninguno de ellos me funciona, no se si porque los estoy usando mal o por qué. Os dejo el codigo a ver si podeis ayudarme.

Código ActionScript :

var myMenu:XML = new XML();
myMenu.ignoreWhite = true;
System.useCodepage = true;

imgItem = new Array();
archivoItem = new Array();
myMenu.onLoad = function() {
   for (var i = 0; i<this.firstChild.childNodes.length; i++) {
     imgItem[i] = this.firstChild.childNodes[i].attributes.img;
     archivoItem[i] = this.firstChild.childNodes[i].attributes.archivo;
   }
   creaBtns(this.firstChild.childNodes.length);
};
function creaBtns(cuantosBotones) {  
   var filas = 20;
   var columnas = 6;
   alturaY = 0;//posY en stage 
   alturaX = 0;//posX en stage
   var xOffset = 167 //17 de separaciónX   
   var yOffset = 117 //17 de separaciónY 
   var depth = 0;
   count = 0;
         for (var f = 0; f<filas; f++) {    
         for (var c = 0; c<columnas; c++) {   
         target = this.attachMovie("item_mc", "item"+depth, depth++, {_x: c*xOffset, _y: 35+f*yOffset});    
       target.image_mc.loadMovie(imgItem[depth-1]);
       target.archivo = archivoItem[depth-1];
         target.onRelease = function() {
          _parent._parent.clip_mc.y=-480;
         _parent.ficha.noticias_xml.load(this.archivo);
            };
      target.onRollOver = function() {  
           this.alphaTo(80,1,_root.T);
           };
      target.onRollOut = function() {  
           this.alphaTo(100,1,_root.T);
           }; 
         
       if(++count>=cuantosBotones) return;
            } 
      }  
}

[b]_root.portfolio_mc.aspa_mc.onPress = function(){
   target.unloadMovie("item" + i);
}[/b]


Lo que he puesto en negrita seria el cod del boton que deberia eliminar los mc's

Muchas gracias


Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Nov 2011 07:38 pm
En este comando

target.unloadMovie("item" + i);

i no tiene ningún valor (es undefined) Y me parece que target no existe, es un puntero que usabas en el loop, debería ser

item1.removeMovieClip()

pruebalo, luego ya lo haces dinamico

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Nov 2011 03:13 pm
Con el codigo que me das consigo eliminar el primer elemento, con lo que tenia yo eliminaba el último.

Me comentas que a partir de tu código, lo haga dinamico, podrias orientarme un poco?? es que ahi ando algo perdido Jorge.

Muchas gracias


Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Nov 2011 06:32 pm
Creas una cantidad de items igual a la cantidad de filas por la de columnas, con lo cual para borrarlos deberías hacer lo mismo pero al reves

Código ActionScript :

depth = 0;
for (var f = 0; f<filas; f++) {    
     for (var c = 0; c<columnas; c++) {   
         this.removeMovieClip("item"+depth);
     }
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos



Ultima edición por solisarg el 08 Nov 2011 01:24 pm, editado 1 vez

Argentina

firefox
Citar            
MensajeEscrito el 08 Nov 2011 12:14 pm
Jorge porque seria "item_mc" ?? si ese es el nombre de instancia para llamar inicialmente a los mc de la biblioteca. Luego los renombro unicamente como "item"

target = this.attachMovie("item_mc", "item"+depth, depth++, {_x: c*xOffset, _y: 35+f*yOffset});


Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Nov 2011 01:24 pm
Correcto, item

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Nov 2011 01:32 pm
En teoria con el cod que me has puesto...

Código ActionScript :

depth = 0;
for (var f = 0; f<filas; f++) {    
     for (var c = 0; c<columnas; c++) {   
         this.removeMovieClip("item"+depth);
     }
}

...es el que he usado para crear tantas filas y columnas como haya en el XML. A excepción de

Código ActionScript :

depth++, {_x: c*xOffset, _y: 35+f*yOffset}); Pero supongo que eso no es relevante porque es la ubicación de cada elemento.

Si le coloco ese codigo al boton, porque no los borra?? si se supone que le estas diciendo removeMovieClip a todos los item??


Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Nov 2011 01:45 pm
Ojo, mira donde apunta this, puedes trazarlos a ver si existen

Código ActionScript :

...
this.removeMovieClip("item"+depth);
trace("item"+depth)..


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Nov 2011 04:00 pm
He usado el trace, y no aparece nada, por lo que no debe de existir.
Tienes razon con el this, en teoria apunta al propio boton que elimina los item. Se supone que seria esto...

Código ActionScript :

depth = 0;
      for (var f = 0; f<filas; f++) {    
         for (var c = 0; c<columnas; c++) { 
            target.removeMovieClip("item"+depth);
            }
         }

...pero no me funciona. Porque el target es cada elemento, es decir cada item.

Está claro que mi razonamiento es erróneo, pero no entiendo el por qué.


Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Nov 2011 06:48 pm
No, target es el puntero cuando lo creas, prueba _root o traza que significa this al momento de crearlos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Nov 2011 08:05 pm
He probado con _root pero no me hace nada. También he usado el trace para ver que ocurría cuando creas los item y me aparece item seguido de un numero en funcion de cuantos elementos haya en el XML.

Si digo simplemente

Código ActionScript :

item1.removeMovieClip();

me borra el primer item, no entiendo xk no se borran todos los elementos usando esto:

Código ActionScript :

depth = 0;
      for (var f = 0; f<filas; f++) {    
         for (var c = 0; c<columnas; c++) { 
            _root.removeMovieClip("item"+depth);
            }
         }

Llamamos a la misma funcion que crea items, pero lo que hacemos es destruirlos. donde esta el error Jorge? porque mi escaso conocimiento de AS me impide deducirlo.

Quizas habria que crear una funcion que borre los items y que el boton llamase a esa funcion?? es lo que se me ocurre...

Muchas gracias


Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Nov 2011 08:10 pm
Para saber donde están haz

target = this.attachMovie("item_mc", "item"+depth, depth++, {_x: c*xOffset, _y: 35+f*yOffset});
trace(target)

Te traza el MC incluida su ruta, luego úsala para borrarlos.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 Nov 2011 10:28 pm
Creia que lo habia conseguido siguiendo la ruta gracias al trace que me comentabas, me decia esto(el trace):

Código ActionScript :

_level0.portfolio_mc.clip_mc.galeria_thumbs.item1
_level0.portfolio_mc.clip_mc.galeria_thumbs.item2
_level0.portfolio_mc.clip_mc.galeria_thumbs.item3
_level0.portfolio_mc.clip_mc.galeria_thumbs.item4
......

donde portfolio_mc , clip_mc y galeria_thumbs son mc creados por mi. Item seguido del numero es cada elemento y _level0 entiendo que es como el _root. o algo similar. Pues basandome en la ruta de donde estan los item he hecho esto y no me ha funcionado:

Código ActionScript :

depth = 0;
      for (var f = 0; f<filas; f++) {    
         for (var c = 0; c<columnas; c++) { 
            _level0.portfolio_mc.clip_mc.galeria_thumbs.removeMovieClip("item"+depth);
            }
         }


Por que no los borra?? si sigue la ruta de los items. A continuacion el remove y despues ("item"+depth) que son los item cargados dinamicamente.

Gracias

Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Nov 2011 11:26 pm
Prueba

_level0.portfolio_mc.clip_mc.galeria_thumbs.["item"+depth ++].removeMovieClip()

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Nov 2011 12:27 am
Tambien lo habia probado antes pero nada. Aunque con el punto (.) despues de galeria_thumbs da error. Seria así:

_level0.portfolio_mc.clip_mc.galeria_thumbs["item"+depth].removeMovieClip();

He probado con depth, con depth++, poniendole parentesis en vez de corchetes a "item"+depth....y no me funciona. Realmente estoy perdido porque si tengo la ruta de creacion, porque no los remueve??

Puede influir que no tenga metido el codigo del boton (boton1.onPress = function()....) dentro de la funcion creabotones?? Es la funcion donde pone el num de filas y columnas, la carga de los textos, imagenes, posicion de cada elementos y demas. Es que ya no se qué pensar

Gracias


Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2011 02:04 am
Vuelve a trazar a ver si existe

trace(_root.portfolio_mc.clip_mc.galeria_thumbs.["item"+depth])

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Nov 2011 12:54 pm
Estoy viendo que usando:

Código ActionScript :

depth = 0;

      for (var f = 0; f<filas; f++) {    

         for (var c = 0; c<columnas; c++) {

antes de _level0.portfolio_mc..... No me funciona ni el trace. Yo creo que lo bloquea o hace que no se ejecute nada. Por que si lo quito y pruebo los trace, si funcionan.


Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Nov 2011 02:24 pm
Seguramente filas y columnas fueron definidas localmente en la otra funci{on y ahora mismo no tienen valor, chequea eso

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Nov 2011 11:31 pm
Orientame un poco cómo se hace eso, es que ando un poco perdido.

Si colocase el codigo del boton de eliminar los items en la funcion inicial donde se definen las filas y columnas y se crean los item con attachMovie....no seria necesario usar el codigo de filas y columnas otra vez no?? O no tiene sentido lo que acabo de decir??

Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Nov 2011 01:26 pm
Define las variables fila y columna fuera de la función, para que no sean locales a ella, sino del timeline, aunque después le des valor dentro de la función. Luego si las utilizas dentro del mismo timeline las puedes acceder, si estás en otro timeline, tienes que usar la ruta al timeline donde fueron definidas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Nov 2011 03:12 pm
Te refieres a que saque esto...

Código ActionScript :

for (var f = 0; f<filas; f++) {    
         for (var c = 0; c<columnas; c++)

...de la funcion inicial de donde hago el attach para cada item??

Si es en la funcion de remove, seria algo asi?? No me funciona pero mas que nada saber si voy en camino o es un completo error.

Código ActionScript :

function galeria(){
   depth = 0;
   for (var f = 0; f<filas; f++) {    
         for (var c = 0; c<columnas; c++) { 
            _level0.portfolio_mc.clip_mc.galeria_thumbs["item"+depth].removeMovieClip();
         }
      }
}

   _root.portfolio_mc.aspa_mc.onPress = function(){ //Boton que elimina los items
      galeria();
   }


Gracias

Rocha

Por rochudo

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Nov 2011 03:36 pm
Tienes que definir los valores fuera de la función, en vez de>

Código ActionScript :

function creaBtns(cuantosBotones) {  
   var filas = 20;
   var columnas = 6;


Haces

Código ActionScript :

   var filas = 20;
   var columnas = 6;
function creaBtns(cuantosBotones) {  


Así los valores serán accesibles desde cualquier función declarada en esa línea de tiempo.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 Nov 2011 04:45 pm
Por fin! ya he dado con ello. Muchas gracias por tu ayuda Jorge. Saqué esas 2 variables de la función como me dijiste y puse:

Código ActionScript :

_root._level0.portfolio_mc.clip_mc.galeria_thumbs["item"+depth++].removeMovieClip();

en el boton para eliminar los items...y me funcionó!!!

Gracias por haber ido orientandome, porque estaba muy perdido al principio.

Un saludo


Rocha

Por rochudo

13 de clabLevel



 

firefox

 

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