La "lógica" del Objeto Loader es medio complicada (aunque no tanto).
Pero antes quiero aclarar algo:
En AS.3 TODO lo controlamos con variables que hacen referencia a Objetos. Casi nos tenemos que olvidar de nuestros queridos "nombres de instancia" (En realidad cuando tenemos en la película principal un Mc con un "nombre de instancia", Flash lo traduce como una variable de tipo MovieClip que "hace referencia" a ese MC.)
Como siempre, las variables pueden pertenecer a la película principal -si las declaramos fuera de cualquier función- y, por tanto accesibles dentro de cualquier función, o ser temporales y sólo usarse dentro de una función.
ejemplo tonto:
Código ActionScript :
var mc:MovieClip; //<--Declaramos una variable de tipo MC aquí
crearMc()
crearOtroMC();
mostrarObjetos();
function crearMc(){
mc= new MovieClip(); //<--usamos la variable declarada antes
addChild(mc)
}
function crearOtroMC(){
var otro_mc:MovieClip = new MovieClip(); //<--creamos la variable aquí
addChild(otro_mc)
}
function mostrarObjetos(){
trace(mc) //--->nos saldrá algo
trace(otro_mc) //--->saldrá "null"
}
"mc" será accesible desde cualquier función, "otro_mc" NO
Vale, aclarado (un poco esto) vamos con un Objeto de la Clase Loader
1.-En principio un Objeto Loader es un objeto que
deriva la Clase Loader que extiende de DisplayObject, con lo cual se puede añadir a la displayList (a la película o a un MC) con un addChild tanto antes como después de que se haya cargado la película. Incluso antes de hacer el load. En ese sentido es como cualquier MovieClip.
Y sí, hasta que no se hace un addChild NO lo veremos en pantallas
Si en la "old school" teníamos un MC "contenedor" donde cargábamos las distintas películas. En AS.3 podemos tener un único objeto Loader donde cargamos las distintas películas.
2.-Cuando hacemos un
Código ActionScript :
var loader:Loader = new Loader();
loader.load(new URLRequest("01.swf"));
Después de que se haya cargado podemos acceder al contenido a través de
Código ActionScript :
loader.content
SIEMPRE que "loader" pertenezca a la película principal y SIEMPRE que se haya cargado.
3.-El modo de controlar la carga de una película que cargamos con un Loader es a través de su "propiedad" contentLoaderInfo.
Por eso al añadir el Listener lo añadimos a
Código ActionScript :
loader.contentLoaderInfo.addEventListener(...,mifuncion)
La función "mifuncion" recibe como parámetro un "loaderInfo", por eso tenemos
Código ActionScript :
mifuncion(e:Event){
var info=e.target as LoaderInfo
trace(info);
trace(info.loader)
trace(info.loader.content)
}
4.-info.loader NO es accesible hasta que se haya cargado completamente la película, esto es, en un Event.COMPLETE, o en un Event.INIT
5.-Desde una película cargada en un objeto Loader que esté en la película principal "parent" es el propio objeto loader, en tanto que "parent.parent" es la propia película principa
6.-como siempre, en AS.3 estamos a cuestas con la "conversión de cast"
NOTA:Se suele escribir
Código ActionScript :
contenedor.name="contenedor"
addChild(contenedor);
//en lugar de
//addChild(contenedor).name = "contenedor";
Darle propiedad "name" a un displayObject no sirve para demasiado, salvo para poder acceder a él a través de getChildByName -si tenemos una variable que hace referencia a dicho DisplayObject no nos hace falta para nada- y, quizá, para, de algún modo, relacionarlo con otra cosa.
Vamos, el motivo de que algo como
Código ActionScript :
contenedor.name="contenedor"
addChild(contenedor);
contenedor.x=100 //<--esto funciona porque tenemos una variable "contenedor",
//podríamos haber escrito
contenedor.name="porompompero"
addChild(contenedor);
contenedor.x=100