Al crear proyectos complejos en Flash, es común tener varios archivos SWF. En estos, podemos tener MovieClips con funciones externas que queremos usar en la película principal. En Actionscript 3, logramos esto tras cargar nuestros .swf con un Loader. En este tip explicaré cómo acceder a las funciones públicas de la clase asignada a un MovieClip de la librería de un archivo .swf externo desde la película principal.
Para mostrar el proceso utilizaré un ejemplo muy simplificado. Tendremos una película swfClipA.fla en cuya biblioteca tendrá un MovieClip al que le hemos asignado una clase, en este caso la clase se llama ClipA, que estará dentro del package clases.

Para simplificar al máximo este ejemplo únicamente haremos que la clase de este clip le coloque un angulo de rotación aleatorio y coloque este valor dentro de una variable, y contendrá una función publica que devuelve dicho valor.
Código :
package clases
{
import flash.display.MovieClip;
public class ClipA extends MovieClip
{
private var angulo:uint;
public function ClipA()
{
this.rotation = Math.round(Math.random() *360);
angulo = this.rotation;
}
public function getAngulo():uint
{
return angulo;
}
}
}Ahora bien, imaginemos que tenemos una película principal en la que cargamos este archivo swfClipA.swf. Esta sería la clase asignada a la película principal:
Código :
package clases
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.net.URLRequest;
import flash.events.Event;
public class Main extends MovieClip
{
private var _swf:MovieClip;
public function Main()
{
var loader:Loader = new Loader();
var request:URLRequest = new URLRequest("swfClipA.swf");
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCargado);
}
private function onCargado(e:Event):void
{
_swf = addChild(e.target.content) as MovieClip;
}
}
}Y ahora desde esta película principal acceder a la función pública del MovieClip interno del archivo externo. Lo único que tenemos que hacer es buscar la ruta de esa clase dentro del clip cargado.
Para ello realizaremos una búsqueda dentro del clip cargado y seleccionaremos cual de ellos está creado con la clase que nos interesa interactuar. Una vez encontrada podremos acceder sin problema a sus funciones públicas.
Código :
for (var i:uint = 0; i < _swf.numChildren; i++)
{
var clip:MovieClip = _swf.getChildAt(i) as MovieClip;
if (clip.constructor == ClipA)
{
var _clipA:MovieClip = clip;
}
trace(_clipA.getAngulo());
}Nota: Este no es un buen ejemplo de uso en cuando a POO se refiere, ya que rompe totalmente la encapsulación de este módulo externo. Lo mejor hubiese sido que esta película externa tuviese en su clase principal toda una serie de funciones publicas, que controlasen las funciones de sus clips interiores, y toda una serie de dispatcher para comunicarse con la película principal tal como si de un componente se tratase, en lugar de andar buscando referencias a clips internos. Pero bueno, en caso de apuro tenemos este recurso.

Por danyrik el 01 de Octubre de 2008
me acuerdo que hace un tiempo necesitaba hacer esto, despues desistí y me olvide de preguntar en foros...
muy bueno che
Por liBcn el 01 de Octubre de 2008
[quote]Lo mejor hubiese sido que esta película externa tuviese en su clase principal toda una serie de funciones publicas, que controlasen las funciones de sus clips interiores, y toda una serie de dispatcher para comunicarse con la película principal tal como si de un componente se tratase[quote]
Podrías profundizar en esto?
Código :
MovieClip es una clase dinámica, que permite extender las propiedades y funciones (sino, te daría error de compilación al tratar de llamar a getAngulo), pero si quieres POO avanzada (getters y setters, namespaces, variables estáticas, super, y demás), tendrías que darle a clipA el tipo de clase ClipA.
Aquí hay un tip sobre eso.
Zah :
Cierto, _clipA es del tipo ClipA evidentemente: var _clipA:ClipA = clip as ClipA; error de escritura
Pero como digo, si quisiesemos una buena POO no iríamos por este camino...
Por ofi el 01 de Octubre de 2008
pero tengo simplemente que darle play
a un swf externo
como hago?
Por hausser el 06 de Octubre de 2008
Igualmente, para una solución sencilla y salir del paso es una buena opción, así que me guardo el método
Deu!!