Deberías poder alcanzarlo con
Código ActionScript :
parent.parent.parent.getChildByName("instance3")
Vamos "instance3" es la propiedad "name" del MC (y es un STRING).
Vale, lo intento de otro modo. Imagina que tenemos en nuestra película un único Mc cuyo "nombre de instancia" es "mimc" y es de la Clase Mimc. Flash "internamente" escribe
Código ActionScript :
var mimc:Mimc=new Mimc()
mimc.name="instance3";
mimc.x=100 //<--la posición que lo tengamos en pantalla
mimc.y=20 //<--la posición que lo tengamos en pantalla
addChild(mimc)
"mimc" es una VARIABLE que hace referencia a un MC. Además es una variable que pertenece a la película principal. Ahora ¿cómo podemos hacer referencia a ese MC desde una función?
Código ActionScript :
function mostrarMc(){
//por la propia variable
trace(mimc)
//con un getChildAt
trace(getChildAt(0))
//con un getChildVyName
trace(getChildByName("instance3"))
}
Vale, un poco sobre "parent". Cuando usamos parent, Flash sólo sabe que el "padre" es un DisplayObject -realmente un
DisplayObjectContainer. Eso significa que no son accesibles las "variables", y por tanto, si ponemos nombre de innstancia no podremos addecer a ello. Es por eso que se hace una "conversión de Cast". Esto es, escribimos
Código ActionScript :
MovieClip(parent)
//ó
MovieClip(parent.parent)
Observa que no hay problema para escribir parent.parent, puesto que un DisplayObjectContainer sí que tiene accesible la propiedad "parent". Ahora sí podemos buscar el MC
Código ActionScript :
MovieClip(parent).mimc
//ó
MovieClip(parent.parent).otromc
Si lo que tenemos es la "propiedad name", no nos hace falta la "conversión de cast"
Código ActionScript :
parent.getChildByName("instance3")
//ó
parent.parent.getChildByName("instance3")
Aunque, de nuevo, getChildByName devuelve un "displayObject". Por eso, si tenemos una variable en un MC debemos hacer la conversión de Cast. Vale, un código más completo
Código ActionScript :
var mc_interior:MovieClip=new MovieClip()
var mc_contenedor:MovieClip=new MocieClip()
mc_interior.name="interior"
mc_contenedor.name="contenedor"
mc_interior.variable="Hola mundo"
mc_contenedor.addChild(mc_interior)
addChild(mc_contenedor)
//Cuando nos referimos por la variable funciona tal cual
trace (mc_contenedor)
trace (mc_interior)
trace (mc_interior.variable)
//cuando usamos getChildByName, devuelve un DisplayObject, por eso
trace(getChildByName("contenedor"))
trace(getChildByName("contenedor").getChildByName("interior"))
//pero...
trace(getChildByName("contenedor").getChildByName("interior").variable) //<---NO funciona
//debemos hacer una conversión de cast
trace(MovieClip(getChildByName("contenedor").getChildByName("interior")).variable) //<---ahora sí
Vale, la cosa se complica cuando hemos creado un MC dentro de otro MC en tiempo de diseño -no por programación- porque la variable pertenece al MC contenedor. Vamos que sería como si hiciéramos
Código ActionScript :
var mc_contenedor:MovieClip=new MocieClip()
var mc_contenedor.mc_interior:MovieClip=new MovieClip() //<--es una variable que "pertenece" a mc_contendor
mc_contenedor.mc_interior.name="interior"
mc_contenedor.name="contenedor"
mc_contenedor.mc_interior.variable="Hola mundo"
mc_contenedor.addChild(mc_contenedor.mc_interior)
addChild(mc_contenedor)
Puff, sé que es "espeso", al menos quedémonos con 3 ideas:
1.-No tiene nada que ver la propiedad name con el nombre de instancia.
2.-Cuando le damos nombre de instancia a un MC, realmente Flash crea una "variable"
3.-getChildByName devuelve un displayObject, por lo que es posible que necesitemos realizar una conversión de cast