Comunidad de diseño web y desarrollo en internet online

Loader / unload

Citar            
MensajeEscrito el 26 Ago 2007 10:40 pm
Actualmente tengo una seria crisis tratando de pasarme a AS3.
Nuevamente algo que solía hacer fácilmente, me ha dado un serio dolor de cabeza:

he cargado un .swf a mi pelicula principal. con esto:

Código :

function randomeo ()
{      
   var fra:Loader = new Loader();
   var ran:int = Math.floor(Math.random()*6)
   var urlfra:String = "frases/frase_es"+ran+".swf";
   var urlReq:URLRequest = new URLRequest(urlfra);
   fra.load(urlReq);
   addChild(fra);
}
randomeo();


todo resulto muy bien hasta que he llegado a la parte en que requiero REMOVER el .swf cargado.

La remoción debería realizarse cuando se interacua con un combobox.
Pero es en esta parte donde necesito la ayuda.

Por lo que he visto. Al parece la funcion que interactua con el CB (de llenado y cambiado de info) no puede llamara al pedazo de funcion que inserte en otro keyframe para remover el MC cargado anteriormente.

Entonces si coloco un listener cerca de la funcion que cargo al MC inicial funciona la I vez, pero las que vienen envia errores.

Mi pregunta es:
1-si tengo un MC cargado con exito, como lo puedo quitar usando las funciones y los listener del CB

este es el codigo que interactua con el CB:


Código :

////////////////////////////////////////////////////////////////////////
// Below are ColdFusion and AMFPHP connect settings. Use the one you need 
// and comment the other. Change the amfphp path to gateway to match your needs
////////////////////////////////////////////////////////////////////////
//INICIO
function init():void {
   /////funcion de scrollbar visible o no
   function visibilidad (){
   scr.scrollTarget = biotext;
      if (biotext.maxScrollV != 1) {
        scr.visible = true;
         } 
      else {
          scr.visible = false;
        }
   }
         
visibilidad();
var nc = new NetConnection()
nc.connect("http://localhost/amfphp/gateway.php");
var responder = new Responder(getTitles_Result, onFault);
nc.call("quat_secc.getMyRecords", responder);


//INICIO
function getTitles_Result(rs:Object){
   var cant:Number = rs.serverInfo.totalCount;
   relleno();
   //INICIAN FUNCIONES ESPECIALES
   function relleno(){
      nombre = new Array(cant);
      seccion = new Array(cant);      
         for(var i=0; i<cant; i++){
         //Llenar los arrays
            nombre[i] = rs.serverInfo.initialData[i][0];
            seccion[i] = rs.serverInfo.initialData[i][2];
            //trace (nombre[i]+"--"+seccion[i]);
         }
      llenarCombo();
   }
   //FUNCION DE LLENADO
   function llenarCombo(){
   //Le asignamos un proveedor de datos
      var losDatos:Array = new Array();
      var dp:DataProvider = new DataProvider(losDatos);
      cb.dataProvider = dp;
      
   
   //Metemos los datos en el ComboBox
      for (i=0; i<cant; i++){
         //cb.addItem (label: "inicio", data: "nulo");
         dp.addItem({ label: seccion[i], data: nombre[i] });
      }
   }   
   //EL ESCUCHADOR
cb.addEventListener("change",seleccion);
   function seleccion (sec_esco){
      //trace("tocado: "+sec_esco.target.selectedItem.data);      
      var url:String = "http://localhost/quat_admin/decomp.php?id="+sec_esco.target.selectedItem.data;
      var loadit:URLLoader = new URLLoader();
      loadit.addEventListener(Event.COMPLETE,completeHandler);
      loadit.load(new URLRequest(url));
      function completeHandler(event:Event):void {
      marcador = event.target.data as String;
      biotext.text = marcador.split("\n").join('')
      //biotext.setTextFormat(my_fmt);
      visibilidad();
      }
   }
}
function onFault(f:Event ){
   trace("There was a problem: " + f.description);
}
stop()
}
init();

Por aolba

31 de clabLevel



Genero:Masculino  

resolvedor de problemas

firefox
Citar            
MensajeEscrito el 27 Ago 2007 01:08 am
cuando estes en el evento, change por ejemplo del combo, puedes usar removeChild(fra) para quitar el elemento, supongo que si lo vuelves a cargar y a agregar a la peli principal, te pondrá el nuevo contenido.

Saludox!

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox
Citar            
MensajeEscrito el 27 Ago 2007 02:59 pm
Ese fue uno de mis primeros intentos, pero al hacerlo me indica que la variable fra, no esta definida.
por eso es que me da la impresion de que las funciones no pueden interactuar entre si cuando estan separadas.

El comando que indicas si es el correcto, porque ya solucione el problema. Aunque no de la manera mas fácil (como parece ser la norma en AS3). Lo que hice fue crear una funcion GIGANTE, que abarca las funciones de interaccion del CB y las de cargar de mi MC exterior. Asi me aseguro de que la variable fra, todavia quede registrada cuando llego a la parte del CB.
Como dije no me parece la mas sencilla, pero en verdad siento que la forma en que el AS3 trabaja es complicada y enredada. Se que tengo la opción de trabajar con AS2, pero para este proyecto necesitaba moverme para AS3. Y he tenido que aprender y hasta buscar opciones alternas a cosas sencillas como "cargar swf's externos", "hacer botones", "usar fragmentos de código". Y hasta el momento mi post donde pregunto como aplicar movimiento Tween a un componente no ha sido respondido. Bueno se que no soy el único incomodo con todo esto, pero ni modo.

Por aolba

31 de clabLevel



Genero:Masculino  

resolvedor de problemas

firefox
Citar            
MensajeEscrito el 27 Ago 2007 07:23 pm
declara fra fuera de cualquier función, al tener declarada fra dentro de randomeo(), solo será accesible en esa función y por eso no puedes hacer el removeChild() en otra funcion (o evento).

Por master_of_puppetz

Claber

2483 de clabLevel

7 tutoriales
3 articulos

Genero:Masculino   Premio_Secretos

WebDev (Flex + PHP + JS)

firefox

 

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