Comunidad de diseño web y desarrollo en internet online

Eliminar una función creada independientemente en as3.

Citar            
MensajeEscrito el 26 May 2010 04:20 pm
He creado unos contenedores mediante una función independiente que se carga.

function createContainer():void {
container_mc = new MovieClip();
container_mc.x = my_x;
container_mc.y = my_y;
addChild(container_mc);

preloaders_mc = new MovieClip();
preloaders_mc.x = container_mc.x;
preloaders_mc.y = container_mc.y;
addChild(preloaders_mc);
}

necesitaria quitarla de la pantalla.

Por Jesus Lopez

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 May 2010 06:26 am
Para quitar un Mc de la DisplayList basta con usar removeChild. Así que rápidamente pondríamos

Código ActionScript :

removeChild(container_mc)
removeChild(preloaders_mc)

Vale, he escrito "rápidamente pondríamos". ¿por qué? Pues porque hay que saber si tiene valor nuestras VARIABLES "container_mc" y "preloaders_mc" (sí, son variables -que hacen referencia a MCs, pero variables al fin y al cabo-)
Si las variables las hemos definido DENTRO de la función, ya sabemos que fuera de ella no tienen valor

Código ActionScript :

function createContainer():void {
   var container_mc:MovieClip = new MovieClip(); //<---definida DENTRO de la función
   addChild(container_mc);
}
//Aquí no podemos poner
removeChild(container_mc)

Así que podemos hacer dos cosas
1.-Darle valor a la propiedad name, para poder recogerlo con un getChildByName

Código ActionScript :

function createContainer():void {
   var container_mc:MovieClip = new MovieClip(); //<---definida DENTRO de la función
   container_mc.name="nombre" //<--le doy valor a la propiedad "name"
                      //normalmente le daría como nombre "container_mc", pero quiero 
                      //que quede claro que se trata de dos cosas distintas
                      //uno es el nombre de la variable y otro es la propiedad "name" de nuestro MC
   addChild(container_mc);
}
//Lo haríamos en un paso
removeChild(getChildByName("nombre"))
//o en dos si queremos
var mc:MovieClip=getChildByName("nombre") as MovieClip
removeChild(mc)

NOTA1:He puesto el removeChild directamente en el frame, en lugar de en una función -funciona igual dentro de una función-
NOTA2:Por favor, si escribes código en el foro trata de escribirlo entre [a s] y [/a s] (sin los espacios)
[a s]
aquí tu código
[/a s]

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2010 01:36 pm
Pongo el código completo ya que no puedo quitar los contenedores de la pantalla con tus aclaraciones Elíseo, no obstante agradeciéndote tus respuestas, pero me estoy volviendo medio loco.
Las funciones que quiero quitar son: textoDescripcion_mc, textoModelo_mc y textoPrecio_mc.
Gracias

Código ActionScript :

stop();
import fl.controls.ProgressBar;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
marcas_btn.mouseEnabled = false;
interior_btn.mouseEnabled = false;
exterior_btn.mouseEnabled = false;
leds_btn.mouseEnabled = false;
ofertas_btn.mouseEnabled = false;
var columns:Number;
var my_x:Number;
var my_y:Number;
var my_thumb_width:Number;
var my_thumb_height:Number;
var my_images:XMLList;
var my_total:Number;                     
var i:Number;
var myXML:XML;
var my_descripcion:XMLList;
var my_modelo:XMLList;
var my_precio:XMLList;
var my_textoprecio_x:Number;
var my_textoprecio_y:Number;
var x_con:Number = 0;
var y_con:Number = 0;
var x_cont:Number = 0;
var y_cont:Number = 0;
var x_conta:Number = 0;
var y_conta:Number = 0;
var container_mc:MovieClip;
var preloaders_mc:MovieClip;
var full_mc:MovieClip;
var x_counter:Number = 0;
var y_counter:Number = 0;
var my_tweens:Array = [];
var container_mc_tween:Tween;
var full_tween:Tween;
var myXMLLoader:URLLoader = new URLLoader();
myXMLLoader.load(new URLRequest("./xml/gallery.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void {
   var myXML:XML = new XML(e.target.data);
   columns = myXML.@COLUMNS;
   my_x = myXML.@XPOSITION;
   my_y = myXML.@YPOSITION;
   my_thumb_width = myXML.@WIDTH;
   my_thumb_height = myXML.@HEIGHT;
   my_textoprecio_x = myXML.@XPRECIO;
   my_textoprecio_y = myXML.@YPRECIO;
   my_descripcion = myXML.IMAGE.@DESCRIPCION;
   my_modelo = myXML.IMAGE.@MODELO;
   my_precio = myXML.IMAGE.@PRECIO;
   my_images = myXML.IMAGE;
   my_total = my_images.length();   
   createContainer();   
   callThumbs();
   //marcoThumbs();
   textoDescripcion_mc();
   textoModelo_mc()
   textoPrecio_mc();
   myXMLLoader.removeEventListener(Event.COMPLETE, processXML);
   myXMLLoader = null;
}
function createContainer():void {
   container_mc = new MovieClip();
   container_mc.x = my_x;
   container_mc.y = my_y;
   addChild(container_mc);
   container_mc.addEventListener(MouseEvent.CLICK, callFull);
   container_mc.addEventListener(MouseEvent.MOUSE_OVER, onOver);
   container_mc.addEventListener(MouseEvent.MOUSE_OUT, onOut);
   container_mc.buttonMode = true;
   preloaders_mc = new MovieClip();
   preloaders_mc.x = container_mc.x;
   preloaders_mc.y = container_mc.y;
   addChild(preloaders_mc);
}
function callThumbs():void {
   for (var i:Number = 0; i < my_total; i++) {
      var thumb_url = my_images[i].@THUMB;
      var thumb_loader = new Loader();
      thumb_loader.load(new URLRequest(thumb_url));
      thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);
      thumb_loader.name = i;
      thumb_loader.x = (my_thumb_width+10)*x_counter;
      thumb_loader.y = (my_thumb_height+10)*y_counter;
      if (x_counter+1 < columns) {
         x_counter++;
      } else {
         x_counter = 0;
         y_counter++;
      }
      var preloader_pb:ProgressBar = new ProgressBar();
      preloader_pb.source = thumb_loader.contentLoaderInfo;
      preloader_pb.x = thumb_loader.x;
      preloader_pb.y = thumb_loader.y;
      preloader_pb.width = my_thumb_width;
      preloader_pb.height = my_thumb_height;
      preloaders_mc.addChild(preloader_pb);
      preloader_pb.addEventListener(Event.COMPLETE, donePb);
   }
}
function thumbLoaded(e:Event):void {
   var my_thumb:Loader = Loader(e.target.loader);
   container_mc.addChild(my_thumb);
   my_tweens[Number(my_thumb.name)]=new Tween(my_thumb, "alpha", Strong.easeIn, 0,1,0.5, true);
   my_thumb.contentLoaderInfo.removeEventListener(Event.COMPLETE, thumbLoaded);
}
function callFull(e:MouseEvent):void {
   var full_loader:Loader = new Loader();
   var full_url = my_images[e.target.name].@FULL;
   full_loader.load(new URLRequest(full_url));
   full_loader.contentLoaderInfo.addEventListener(Event.INIT, fullLoaded);
   var full_pb:ProgressBar = new ProgressBar();
   full_pb.source = full_loader.contentLoaderInfo;
   full_pb.x = (stage.stageWidth - full_pb.width)/2;
   full_pb.y = (stage.stageHeight - full_pb.height)/2;
   preloaders_mc.addChild(full_pb);
   full_pb.addEventListener(Event.COMPLETE, donePb);
   container_mc.removeEventListener(MouseEvent.CLICK, callFull);
   container_mc.buttonMode = false;
   container_mc.removeEventListener(MouseEvent.MOUSE_OVER, onOver);
   container_mc.removeEventListener(MouseEvent.MOUSE_OUT, onOut);
   container_mc_tween = new Tween(container_mc, "alpha", Strong.easeIn, 1,0.5,0.5, true);
}
function fullLoaded(e:Event):void {
   full_mc = new MovieClip();
   full_mc.buttonMode = true;
   addChild(full_mc);
   var my_loader:Loader = Loader(e.target.loader);
   full_mc.addChild(my_loader);
   full_tween = new Tween(my_loader, "alpha", Strong.easeIn, 0,1,0.5, true);
   my_loader.x = (stage.stageWidth - my_loader.width)/2;
   my_loader.y = (stage.stageHeight - my_loader.height)/2;
   my_loader.addEventListener(MouseEvent.CLICK,removeFull);
   my_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, fullLoaded);
}
function removeFull(e:MouseEvent):void {
   var my_loader:Loader = Loader (e.currentTarget);
   full_tween = new Tween(my_loader, "alpha", Strong.easeOut, 1,0,0.5, true);
   full_tween.addEventListener(TweenEvent.MOTION_FINISH, tweenFinished);
   container_mc_tween = new Tween(container_mc, "alpha", Strong.easeOut, 0.5,1,0.5, true);
}
function donePb(e:Event):void {
   var my_pb:ProgressBar = ProgressBar(e.target);
   preloaders_mc.removeChild(my_pb);
   my_pb.removeEventListener(Event.COMPLETE, donePb);
}
function tweenFinished(e:TweenEvent):void {
   var my_loader:Loader = Loader (e.target.obj);
   my_loader.unload();
   full_mc.removeChild(my_loader);
   removeChild(full_mc);
   full_mc = null;
   container_mc.addEventListener(MouseEvent.CLICK, callFull);
   container_mc.buttonMode = true;
   container_mc.addEventListener(MouseEvent.MOUSE_OVER, onOver);
   container_mc.addEventListener(MouseEvent.MOUSE_OUT, onOut);
   var my_tween:Tween = Tween(e.target);
   my_tween.removeEventListener(TweenEvent.MOTION_FINISH, tweenFinished);
}
function onOver(e:MouseEvent):void {
   var my_thumb:Loader = Loader(e.target);
   my_thumb.alpha = 0.5;
}
function onOut(e:MouseEvent):void {
   var my_thumb:Loader = Loader (e.target);
   my_thumb.alpha = 1;
}
function textoDescripcion_mc() :void {   
   for (var i:Number = 0; i < my_total; i++) {      
      var descripcion_url = my_images[i].@DESCRIPCION;;   
      var textoDescripcion:TextField = new TextField();
      textoDescripcion.type = TextFieldType.DYNAMIC;      
      textoDescripcion.width = 80;
      textoDescripcion.height = 16;
      textoDescripcion.x = 165 + (my_textoprecio_x  + 100) * x_con;
      textoDescripcion.y = 150 + (my_textoprecio_y + 10) * y_con;      
      if (x_con + 1 < columns){
         x_con++;
      } else {
         x_con = 0;
         y_con++;
      }
               textoDescripcion.wordWrap = false;       
      textoDescripcion.background = true;
      textoDescripcion.backgroundColor = 0x333333;
      textoDescripcion.selectable = false;      
      var txtdFrmt:TextFormat = new TextFormat();
      txtdFrmt.bold = true;
      txtdFrmt.size = 13;
      txtdFrmt.color = 0xffcb65;
      txtdFrmt.align = TextFormatAlign.RIGHT;
      textoDescripcion.defaultTextFormat = txtdFrmt;
      textoDescripcion.text = descripcion_url;
      addChild(textoDescripcion);      
   }
}
function textoModelo_mc() :void {   
   for (var i:Number = 0; i < my_total; i++) {      
      var modelo_url = my_images[i].@MODELO;;   
      var textoModelo:TextField = new TextField();
      textoModelo.type = TextFieldType.DYNAMIC;      
      textoModelo.width = 80;
      textoModelo.height = 16;
      textoModelo.x = 165 + (my_textoprecio_x  + 100) * x_conta;
      textoModelo.y = 165 + (my_textoprecio_y  + 10) * y_conta;       
      if (x_conta + 1 < columns){
         x_conta++;
      } else {
         x_conta = 0;
         y_conta++;
      }
               textoModelo.wordWrap = false;       
      textoModelo.background = true;
      textoModelo.backgroundColor = 0x333333;
      textoModelo.selectable = false;      
      var txtmFrmt:TextFormat = new TextFormat();
      txtmFrmt.bold = true;
      txtmFrmt.size = 13;
      txtmFrmt.color = 0xffcb65;
      txtmFrmt.align = TextFormatAlign.RIGHT;
      textoModelo.defaultTextFormat = txtmFrmt;
      textoModelo.text = modelo_url;
      addChild(textoModelo);      
   }
}
function textoPrecio_mc() :void {   
   for (var i:Number = 0; i < my_total; i++) {      
      var precio_url = my_images[i].@PRECIO;;      
      var precio_mc:MovieClip = new mc();         
      precio_mc.x = 165 + (my_textoprecio_x  + 100) * x_cont;
      precio_mc.y = 180 + (my_textoprecio_y + 10) * y_cont;      
      if (x_cont + 1 < columns){
         x_cont++;
      } else {
         x_cont = 0;
         y_cont++;
      }
      precio_mc.precio_txt.text = precio_url;
      addChild(precio_mc);         
      precio_mc.addEventListener(MouseEvent.MOUSE_MOVE, myOver);
      precio_mc.addEventListener(MouseEvent.MOUSE_OUT, myOut);
      precio_mc.addEventListener(MouseEvent.MOUSE_DOWN, myPress);
   }
}      
function myOver(evt:MouseEvent) :void {         
   Mouse.cursor = MouseCursor.BUTTON;
}
function myOut(evt:MouseEvent) :void {
   Mouse.cursor = MouseCursor.ARROW;
}
function myPress(evt:MouseEvent) :void {         
   var t:TextField = new TextField();  
   var i:Number = Number(evt.target.text);
   t.text = (evt.target.text);
   t.x = 650;
   t.y = 5;
   t.width = 60;
   t.height = 20;
   addChild(t);  
}
borrarContenedor_btn.addEventListener(MouseEvent.MOUSE_DOWN, [color=#CC0000]borrar[/color]);
function borrar (e:MouseEvent) :void {
   removeChild(container_mc);
   gotoAndStop(3);
   marcas_btn.mouseEnabled = true;
   interior_btn.mouseEnabled = true;
   exterior_btn.mouseEnabled = true;
   leds_btn.mouseEnabled = true;
   ofertas_btn.mouseEnabled = true;
}

Por Jesus Lopez

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 May 2010 02:11 pm
Vale, resumo. Cuando llamas a la función textoDescripcion_mc

Código ActionScript :

function textoDescripcion_mc() :void {    
   for (var i:Number = 0; i < my_total; i++) {       
      var descripcion_url = my_images[i].@DESCRIPCION;;    
      var textoDescripcion:TextField = new TextField(); 
      ...
      addChild(textoDescripcion);
   }
}

Lo que estás haciendo es crear múltiples TextField. De estos no conocemos nada. (textoDescripcion es una VARIABLE que no tiene valor fuera de la función. Por eso, es bueno que le des valor a la propieda name de tus textos

Código ActionScript :

function textoDescripcion_mc() :void {    
   for (var i:Number = 0; i < my_total; i++) {       
      var descripcion_url = my_images[i].@DESCRIPCION;;    
      var textoDescripcion:TextField = new TextField(); 
      //<---añades esta línea----->
     textoDescripcion.name="texto"+i
      ...
      addChild(textoDescripcion);
   }
}

Así puedes crear una función que las elimine

Código ActionScript :

function eliminarTextoDescripcion_mc() :void {    
   for (var i:Number = 0; i < my_total; i++) {       
      var textoDescripcion:TextField = getChildByName("texto"+i) as TextField
      removeChild(textoDescripcion);
   }
  }

¡OJO! ves que dentro de las dos funciones tengo una variable "textoDescripcion". Las he llamado igual, pero las podría haber llamado de otro modo, p.e.

Código ActionScript :

function eliminarTextoDescripcion_mc() :void {    
   for (var i:Number = 0; i < my_total; i++) {       
      var displayObject= getChildByName("texto"+i) 
      removeChild(displayObject);
   }
  }

Sí cada variable sólo tiene sentido DENTRO de su función
NOTA:Observarás que en el primer caso he hecho una "conversión de cast" (ese as Textfield de

Código ActionScript :

var textoDescripcion:TextField = getChildByName("texto"+i) as TextField

Esto es porque el método getChildByName devuelve un DisplayObject. Si sólo lo queremos "remover", o cambiar de posición nos valdría con una variable de tipo DisplayObject. Si quisiéramos acceder a su propiedad "text" deberíamos hacer la "conversión de cast"

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2010 03:01 pm
Hola, mucas gracias, ha funcionado correctamente.

Por Jesus Lopez

10 de clabLevel



 

chrome

 

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