Flash. Problema con variable creada desde una clase en _root
Buenos días, estoy teniendo el siguiente problema y no se bien como solucionarlo.
Se trata de una galería, cree hace tiempo una clase, bueno utilicé una clase de un libro que se llama "Flash application Design solutions: The flash usability handbook". Está muy bien por cierto.
Al grano, cargo el XML, y llamo a una función para crear la galeria.
Creo la galería correctamente, pero cargo imágenes dinámicamente.
Al intentar obtener la altura obtengo siempre "0" como resultado.
He visto que es un problema común, entonces desde la clase, en el método "onLoadInit" cuando ya se ha cargado todo, hago lo siguiente:
<code>"_root.tamanioImagen = _targetClip._height;"</code>
Seguro que no es muy correcto, pero bueno, es lo que se me había ocurrido.
El caso es que este valor, que veo que se refleja en el "Depurador", con el valor adecuado, si accedo directamente desde la función que crea la galería, que a su vez llama a la clase que carga las imágenes me devuelve "undefined". En cambio, la imagen que cargo, al ponerle un <code>"this.onPress() = function(){
trace(_root.tamanioImagen);
}"</code>
Me devuelve el valor correcto.
Estoy seguro de que es un problema de entorno de variables y que de alguna forma no llego al dato, ya sea porque no se escrito o porque desde ese "lugar" no se puede acceder.
Mi objetivo: tener algún sitio dónde guardar el dato del alto de la imagen para poder luego colocarla correctamente dependiendo del contenido que tenga.
Gracias de antemano!
Saludos.
Usuario desconocido
El AS del primer fotograma:
<code>function crearGaleria () {
_root.createEmptyMovieClip("mc_contenedor",1);
mc_contenedor.createEmptyMovieClip("mc_logo", 2);
mc_contenedor.mc_logo.createEmptyMovieClip("mc_logoCebo", 3);
var imagenAcargar:String = docXML.firstChild.childNodes[0].attributes.imagen;
var dondeCarga:Object = mc_contenedor.mc_logo.mc_logoCebo;
mc_contenedor.attachMovie ("MC_MovieClipLoaderUI", "preload_mc", 4, {_x:140, _y:100});
mc_contenedor["preload_mc"].init (imagenAcargar,dondeCarga);
trace(_root.tamanioImagen);
dondeCarga._parent.onPress= function(){
trace(_root.tamanioImagen);
}
};
var docXML:XML = new XML ();
docXML.ignoreWhite = true;
docXML.onLoad = crearGaleria;
docXML.load ("xml/prueba.xml" );
stop ();
</code>
El XML:
No lo muestra correctamente, pero tiene que tener el atributo "imagen" en el nodo tema.
<code><xml>
<galeria>
<tema>
</tema>
</galeria></code>
La clase:
<code>class MovieClipLoaderUI extends MovieClip {
private var mLoader:MovieClipLoader;
private var owner:Object;
public var targetClip:MovieClip;
private var loadUrl:String;
//--------------------------------------------------------------------------------
function MovieClipLoaderUI(){
}
//--------------------------------------------------------------------------------
public function init(_loadUrl:String, _targetClip:MovieClip):Void {
loadUrl = _loadUrl;
targetClip = _targetClip;
initLoad();
}
//--------------------------------------------------------------------------------
private function initLoad():Void {
mLoader = new MovieClipLoader();
mLoader.addListener(this);
mLoader.loadClip(loadUrl, targetClip);
}
public function onLoadInit(_targetClip:MovieClip):Void {
_root.tamanioImagen = _targetClip._height;
trace(_root.tamanioImagen);
}
//--------------------------------------------------------------------------------
}</code>
Usuario desconocido
Me contesto a mi mismo...
La variable se escribe correctamente, pero no da tiempo a cogerla.
Cuando se pone el siguiente código, tras 3 o 4 intentos sale el valor deseado:
<code>
onEnterFrame = function () {
if (_root.imageSize!=undefined){
trace("por fin...");
delete onEnterFrame;
}else {
trace("nada");
}
}</code>