Comunicación con swf externos

Con la aparición de AS3, la forma de comunicar y cargar swf externos ha cambiado. En AS2 resultaba cómodo la utilización de la función loadMovie() o la clase MovieClipLoader, pero conllevaba varios inconvenientes, como por ejemplo, no había una manera eficiente de saber cuántos objetos había en una película o contenedor, la problemática del manejo de profundidades (poco intuitivo con el swapDepths() y el getNextHighestDepth()).

Con la aparición de AS3 y su nueva arquitectura de objetos gráficos, la display list, todo esto ha cambiado. Éste modelo aporta mayor robustez y simplicidad a la hora de controlar cualquier elemento de la película flash.
La clase que se utiliza ahora para cargar cualquier elemento visual externo (SWF, JPEG, PNG,..) es la clase Loader que está dentro del package flash.display.

Un ejemplo básico de carga de un swf externo sería:

[ftf w=”450″ h=”180″]
package {
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.net.URLRequest;

public class TestLoader extends MovieClip
{
public function TestLoader()
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
loader.load(new URLRequest(“swfExterno.swf”));
addChild(loader);
}

private function onProgress(event:ProgressEvent):void
{
var porcentaje:Number = event.bytesLoaded/event.bytesTotal * 100;
}

private function onComplete(evt:Event):void
{
trace(“completado”);
}

private function ioError(error:IOErrorEvent):void
{
trace(“Error:” + error);
}
}
}
[/ftf]

A modo de pequeña explicación, lo que estamos haciendo es cargar el elemento externo dentro de nuestra clase Loader a través de su método load. Añadimos los listeners al contenido del mismo, no al objeto loader, y esperamos al evento onComplete para añadirlo a la escena con addChild.

Hasta aquí, es un ejemplo básico de carga de cualquier archivo externo dentro de nuestra aplicación flash/flex. Pero, una vez que tenemos este archivo cargado, tenemos que preguntarnos ¿como accedemos a los métodos o propiedades en el caso que sea un swf?

Hay varias formas de hacerlo, cada una con sus pros y sus contras:

    a) Por notación de Array:
    loader.content["metodo"]();

    b) Casteándolo a un MovieClip:
    mipelicula:MovieClip=loader.contentInfo
    mipelicula.metodo();

    Así, el método onComplete quedaría de la siguiente forma:

    [ftf w=”450″ h=”130″]
    private function onComplete(evt:Event):void {
    var swf:MovieClip = evt.target.content;
    //swf[‘sayHello’]();
    swf.sayHello();
    }
    [/ftf]

    El swf externo tendría una clase igual a ésta:

    [ftf w=”450″ h=”180″]
    package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.text.TextField;

    public class SWFExterno extends MovieClip
    {
    public var log_txt:TextField;

    public function SWFExterno(){
    }

    public function sayHello():void {
    this.log_txt.text = “Hello World”;
    this.dispatchEvent(new Event(“‘eventoSWFExterno’”));
    }
    }
    }
    [/ftf]

    Igualmente si necesitas comunicarte desde el swf externo a tu aplicación, lo puede hacer lanzando eventos y capturándolos desde tu aplicación gracias al event bubbling.

2 Comentarios

  1. David

    Para capturar los eventos del swf externo se puede hacer de forma directa:
    a) swf.addEventListener(‘eventoSWFExterno’,onEvent)
    b) O puedes capturarlo en cualquier elemento que esté en la DisplayList.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acerca de Made In Flex

Made In Flex es una comunidad de desarrolladores de Apache Flex creada en 2006.

Apache Flex, anteriormente conocido como Adobe Flex, es un SDK (kit de desarrollo de software) para crear aplicaciones enriquecidas - multiplataforma basadas en Adobe Flash donado por Adobe a la fundación Apache in 2011 y promocionado a proyecto de primer nivel en Diciembre de 2012.

Actualmente estamos cambiando muchos aspectos del sitio web para ofrecer un sitio útil para toda la comunidad que tenga en cuenta las necesidades actuales.

Últimas Fotos

Instalador de Apache Flex

Entrar o Registrase