Tal y como dice El_putas, el problema es que cargas ENCIMA del mismo. De cualquier modo hay una cosa el el código que no me gusta especialmente y es tener una función DENTRO de otra función. Ya sé que funciona pero no me gusta. Conceptualmente estamos redefiniendo constantemente un función, pero, por lo que no me gusta es que dependemos del "scope" (que es algo que a la larga nos traerá de cabeza)
Pongo el código que NO funciona, pero separadas las funciones
Código ActionScript :
stage.addEventListener(MouseEvent.MOUSE_DOWN,cargarsim)
var indicesim:Number=1
var carga: Loader
var num:Number = 0
function cargarsim (e: MouseEvent) :void
{
var ruta_sim : URLRequest = new URLRequest ("graficos/sim" + indicesim +".swf"));
carga = new Loader();
carga.load (ruta_sim);
carga.contentLoaderInfo.addEventListener (Event.COMPLETE, mostrarsim);
}
function mostrarsim( e:Event):void
{
addChild (carga);
carga.name = "carga"+num/
carga.addEventListener(MouseEvent.CLICK, onName)/
carga.x += 45*num; //solo para q se cargue en una posición diferente
carga.y += 45*num;//solo para q se cargue en una posición diferente
num++
}
}
¿por qué no va a funcionar? Pues, si nos fijamos, la variable "carga" está definida en la función "cargarsim", luego la función "mostrarsim" no sabe cuál es. Sé que la podríamos definir FUERA de la función, pero tendríamos el problema de si pulsáramos muy rápido el botón.
TODAS las funciones que controlan eventos de Flash tienen como argumento una variable de tipo
Event (o de tipo
MouseEvent si estamos manejando un evento de ratón)
Bien, si nuestra variable se llama "e"
e.target es quien recibió el evento. En un evento del tipo ENTER_FRAME o MOUSE_DOWN será el MC, en el caso que nos ocupa NO es "cargar", sino carga.contentLoaderInfo. No hay problema, podemos escribir
Código ActionScript :
function mostrarsim( e:Event):void
{
var carga:Loader=e.target.loader as Loader;
addChild (carga);
carga.name = "carga"+num/
carga.addEventListener(MouseEvent.CLICK, onName)/
carga.x += 45*num; //solo para q se cargue en una posición diferente
carga.y += 45*num;//solo para q se cargue en una posición diferente
num++
}
}
y ya está.
Fijémonos un poco en la línea
Código ActionScript :
var carga:Loader=e.target.loader as Loader;
En primer lugar he usado el mismo nombre de variable "carga", pero podría haber usado cualquier otra. No tiene nada que ver esta con la anterior (de hecho la anterior en este momento no tiene valor)
Luego está eso de "as Loader". Si nos fijamos en la ayuda de Event (el enlace anterior) vemos que "target" es una variable de tipo "Objet"
¿qué quiere decir eso?
Pues que nos podemos referir a todas las propiedades que tenga, pero Flash NO sabe que es un MC, un Loader o un LoaderInfo. Así que somos nosostros los que se lo tenemos que decir. Eso es una "conversión de cast" y eso es eso tan extraño de "as Loader"
Por cierto, que podemos cargar el Loader completo o su contenido
Código ActionScript :
function mostrarsim( e:Event):void
{
var contenido:DisplayObject=e.target.content as DisplayObject;
...el resto igual, bueno, cambiamos carga por contenido...
}