Comunidad de diseño web y desarrollo en internet online

Llamar a una función de swf externo

Citar            
MensajeEscrito el 08 Ene 2010 10:12 am
Tenga un .fla principal en el cuál cargo varios swf's externos.

Desde el .fla principal necesito invocar una función de uno de los swf que cargo. ¿Cómo puedo ejecutar esta función?

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Ene 2010 11:21 am
He hecho unas pruebas y no logro acceder a la función del swf externo, pongo el código a ver si me podéis aclarar este concepto:

Código del .fla principal:

Código ActionScript :

// Declaramos el contenedor y agregamos a escena
var contenedor:Sprite = new Sprite();
addChild(contenedor);

// Declaramos el cargador y el URLRequest para los swf externos
var cargador:Loader = new Loader();
var url:URLRequest;

// Listener que llama a la función que carga el swf externo
inicio_mc.addEventListener(MouseEvent.CLICK, cargarSeccion);
inicio_mc.buttonMode = true;

// Función que carga el swf externo
function cargarSeccion(e:MouseEvent){   
   cargador.load(new URLRequest("swf/secundario.swf"));
   var nombre:String = secundario;
   cargador.x=258;
   cargador.y=260;
        contenedor.addChild(cargador);   
}

// Listener para llamar a la función del swf externo
verde_mc.addEventListener(MouseEvent.CLICK, llamar);

function llamar(e:MouseEvent){
   contenedor.cargador.content.sayHello(); // Llamamos a la función del swf externo
}


Código del .fla secundario:

Código ActionScript :

llamado_mc.addEventListener(MouseEvent.CLICK, sayHello);

function sayHello(e:MouseEvent){
   trace("Hi");
}


De este modo, no logro acceder a la función sayHello del swf externo, ¿cómo debería hacerlo?

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Ene 2010 11:44 am
Intenta una conversión de cast

Código ActionScript :

MovieClip(contenedor.cargador.content).sayHello()

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Ene 2010 05:36 pm
Gracias Eliseo:

He probado tu propuesta pero me da el siguiente error:

[as]1119: Access of possibly undefined property cargador through a reference with static type flash.display:Sprite.

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Ene 2010 07:28 pm
el error esta en que tambien conviertes el contenedor que es un Sprite a MovieClip , el segundo error que veo es que la funcion sayHello responde a un listener del tipo MouseEvent, por lo tanto recibe un parametro , al grano un pequeño ejemplo :

SWF A

Código ActionScript :

var container:Sprite = new Sprite();
container.x = container.y = 30;
addChild(container);


var swfLoader:Loader = new Loader();
swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

function onComplete(evt:Event):void
{
   removeEventListener(Event.COMPLETE,onComplete);
   trace(evt.type);
   container.addChild(evt.target.content);
   //agregamos el listener para llamar a la funcion del swfB
   mCallSWFB.addEventListener(MouseEvent.CLICK, onClick);
}


swfLoader.load(new URLRequest("swfB.swf"));

function onClick(evt:MouseEvent):void
{
   //hacemomos el cast, le pasamos null que al fin de cuentas vale
   MovieClip(swfLoader.content).onSayHello(null);
}


SWF B

Código ActionScript :

mCall.addEventListener(MouseEvent.CLICK,onSayHello);

function onSayHello(evt:MouseEvent):void
{
   trace("hi from SWFB");
}


eso es todo espero te sirva, saludos.

Jonathan.

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 25 Ene 2010 12:14 pm
He estado probando el código de Eliseo pero me da un error:

[as]1120: Access of undefined property mCallSWFB.

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Ene 2010 12:36 pm
Prueba así (no lo he probado):

Código ActionScript :

// Declaramos el contenedor y agregamos a escena 
var contenedor:Sprite = new Sprite(); 
var contenido:Object;

addChild(contenedor); 
 
// Declaramos el cargador y el URLRequest para los swf externos 
var cargador:Loader = new Loader(); 
var url:URLRequest; 
 
// Listener que llama a la función que carga el swf externo 
inicio_mc.addEventListener(MouseEvent.CLICK, cargarSeccion); 
inicio_mc.buttonMode = true; 
 
// Función que carga el swf externo 
function cargarSeccion(e:MouseEvent){    
   cargador.load(new URLRequest("swf/secundario.swf")); 
   var nombre:String = secundario; 
   cargador.x=258; 
   cargador.y=260; 
   contenedor.addChild(cargador);
   contenido = cargador.target.content;
} 
 
// Listener para llamar a la función del swf externo 
verde_mc.addEventListener(MouseEvent.CLICK, llamar); 
 
function llamar(e:MouseEvent){ 
   contenido.sayHello(); // Llamamos a la función del swf externo 
}

Y en el .flas secundario:

Código ActionScript :

llamado_mc.addEventListener(MouseEvent.CLICK, pulsarHello); 

function pulsarHello(e:MouseEvent){ 
   sayHello(); 
}

function sayHello():void{ 
   trace("Hi"); 
}

Por juanfher

74 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Ene 2010 01:10 pm
Funciona!!! lo único que al ejecutar la función llamar me sale el siguiente error:

Código ActionScript :

TypeError: Error #1009: Cannot access a property or method of a null object reference.
   at principal_Scene1_fla::MainTimeline/llamar()


Parece no reconocer qué el contenido.... ¿Cómo evito este error?

Por tementa

33 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Ene 2010 02:01 pm
... mmm no sé, algo me dejaría atrás... prueba esto:

Código ActionScript :

function cargar_seccion(seccion:String):void {
   var loader:Loader = new Loader();
   loader.contentLoaderInfo.addEventListener(Event.COMPLETE, seccion_cargado);
   loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, seccion_error);
   loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, seccion_progreso);
   loader.load(new URLRequest(seccion));
}

function seccion_cargado(e:Event):void {
   cargador.addChild(e.target.content);
   var contenido:Object = e.target.content;
   contenido.funcionSecundaria();
}

function seccion_error(e:IOErrorEvent):void {
   //trace("ioErrorHandler: " + e);
}
function seccion_progreso(e:ProgressEvent):void {
   //trace("progressHandler: bytesLoaded=" + e.bytesLoaded + " bytesTotal=" + e.bytesTotal);
}

boton.addEventListener(MouseEvent.CLICK, pulsarBoton);

function pulsarBoton(e:MouseEvent){  
   seccion_cargado("swf/secundario.swf");
} 


y en el .fla secundario:

Código ActionScript :

botonSec.addEventListener(MouseEvent.CLICK, pulsarBotonSec);  
 
function pulsarBotonSec(e:MouseEvent){  
   funcionSecundaria();  
} 
 
function funcionSecundaria():void{  
   trace("Hi");  
}

Por juanfher

74 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Ene 2010 04:35 pm

tementa escribió:

He estado probando el código de Eliseo pero me da un error:

[as]1120: Access of undefined property mCallSWFB.


1 no soy Eliseo , 2 si vas a copiar y pegar , tomate la molestia de poner los nombre de instancia correctos , ya que a mi me funciona perfecto el codigo.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox

 

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