Comunidad de diseño web y desarrollo en internet online

Cambiar contenido de un swf que está dentro de otro

Citar            
MensajeEscrito el 24 Jul 2010 10:05 am
Hola a todos, voy a plantearos mi duda con la que ya llevo varios días y no consigo solucionar:

Tengo un swf "principal.swf" al que le he creado un contenedor y en ese contenedor cargo la pelicula "externa.swf" que tiene 3 campos dinámicos de texto, pues bien, quiero que al cargar "externa.swf" en el contenedor, pueda asignarle diferentes textos según el botón que pulse en "principal.swf".

Los campos de texto dinámico de "externa.swf" se llaman "texto1", "texto2" y "texto3".

A ver si me podéis decir lo que estoy haciendo mal (pongo función para un solo botón):

Código ActionScript :

botont1.addEventListener(MouseEvent.CLICK, botont1click_handler);

var cargador:Loader = new Loader();
contenedor.addChild(cargador);

function botont1click_handler(event:MouseEvent)
{
        cargaRuta();

        //Aqui viene mi duda, no se si puedo añadir el texto asi, a mi no me funciona
        contenedor.texto1.text = "HOLA";
        contenedor.texto1.text = "ESTOY";
        contenedor.texto1.text = "PROBANDO";
}
function cargaRuta()
{
   var ruta:URLRequest = new URLRequest("externa.swf");
   cargador.load(ruta);
}


Gracias.

Por player

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jul 2010 10:07 am
Perdón corrijo el código ya que no me deja editar el mensaje:

Código ActionScript :

botont1.addEventListener(MouseEvent.CLICK, botont1click_handler); 
 
var cargador:Loader = new Loader(); 
contenedor.addChild(cargador); 
 
function botont1click_handler(event:MouseEvent) 
{ 
        cargaRuta(); 
 
        //Aqui viene mi duda, no se si puedo añadir el texto asi, a mi no me funciona 
        contenedor.texto1.text = "HOLA"; 
        contenedor.texto2.text = "ESTOY"; 
        contenedor.texto3.text = "PROBANDO"; 
} 
function cargaRuta() 
{ 
   var ruta:URLRequest = new URLRequest("externa.swf"); 
   cargador.load(ruta); 
} 

Por player

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jul 2010 02:40 pm
El error es que no esperas a que termine de cargar para asignar los textos, si no sabes precargar en AS3, busca en la parte de tutoriales

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Jul 2010 03:04 pm
Pues no sé, yo entiendo que cuando llamo a la función cargaRuta() me carga la ruta y ya tengo dentro del contenedor el nuevo swf. También tengo un porcentaje de carga y cuando llega al 100% me carga el swf.

Si fuera porque no espero a que cargue, supongo que me diría que estoy haciendo referencia a un objeto que no existe, pero el error que me da es este: "TypeError: Error #1010: Un término no está definido y no tiene propiedades.", así que supongo que intentando acceder a las propiedades del contenedor de esta forma:

contenedor.texto1.text lo estoy haciendo de forma incorrecta y algo se me está escapando no?

Gracias.

Por player

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jul 2010 03:26 pm
Además de que no tienes preloader (da igual que tengas uno general), no hace fallta el contenedor, simplemente haces un addChild de cargador y accedes a los campos de texto de esta forma:

cargador.content.texto1.text = "Hola"

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 24 Jul 2010 05:08 pm
Gracias por la respuesta.

He intentado hacer lo de la precarga un poco "a mi manera" y no sé si está bien hecho.

He añadido estos dos eventos al cargador:

cargador.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progress_handler);
cargador.contentLoaderInfo.addEventListener(Event.COMPLETE, complete_handler);

Entonces cuando llamo a la función cargaRuta() el cargador hace el load y tengo lo siguiente:

Código ActionScript :

//Esta funcion me va controlando el porcentaje de carga
function progress_handler(event:ProgressEvent)
{
   var porcentaje:Number = event.bytesLoaded*100/event.bytesTotal;
   porcentaje_txt.visible = true;
   porcentaje_txt.text = int(porcentaje)+"%";
}

//Y esta funcion se lanza cuando acaba el proceso de carga, cierto??
function complete_handler(event:Event)
{
   porcentaje_txt.visible = false;   
   cargador.content.texto1.text = "HOLA";
}


Así no debería de funcionar? La función complete_handler se lanza una vez que ya está cargado el nuevo swf, entonces ya tengo garantizada la carga y podría añadir ya el texto no?

Tampoco me funciona así y la lógica me dice que sí debería de funcionar. Ruego un poco de paciencia porque es la primera vez que veo ActionScript y todavía voy un poco perdido.

Gracias.

Por player

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Jul 2010 05:31 pm
prueba con un cast al content , en el handler complete pon :

Código ActionScript :

var _swf:MovieClip = event.target.content as MovieClip;
trace(_swf.texto1 == null)//checa que exista


Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 24 Jul 2010 05:42 pm
Mil gracias Jonathan!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Haciendo el cast a MovieClip del cargador.content ya carga el texto bien.

Muchas gracias!!!!

Por player

3 de clabLevel



 

firefox

 

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