Acceder a funciones en MovieClips de películas .swf externas
Cuando creamos aplicaciones complejas es probable que las construyamos a partir de cargar módulos creados en pequeñas películas .swf externas cargadas dentro de un Loader en la película principal. Estas pequeñas películas contendrán clips con clases asociadas que dispondrán de funciones públicas que nos interesará ejecutar desde la película principal. En este tip explicaré precisamente eso, 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.
- 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:
- 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.
- 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());
- }
Compártelo:
Visto 12.988 veces
muy bueno.. este ejemplo.