hola a todos,

Estoy comenzando a trabajar con clases en as2 y me surgen dudas y problemas... (y seguro que hay alguna chapucilla en el código) Estoy haciendo un menú completamente dinámico que tira de XML (los valores XML lo tengo en funciones globales). Para montar el menú en el stage he creado la clase VerImagenes.as
Crear el menú lo hace bien, lo que no me funciona es cuando quiero asignarle eventos de ratón... solo consigo que funcione sobre mi propiedad container_mc que es la que contiene el menú.
Vereis que parece que hay mucho código, pero lo que hay es mucho comentario... (de todos modos, he quitado parte del código de las clases no afectadas en el problema)

la cuestión está en que si funciona el puntero de addListener, pero solo cuando se lo aplico a "this" pero no cuando lo hago para la propiedad "posImg", que es donde se almacena el movieclip de cada imagen creada. Entonces:

1.- Que hago para que funcione el evento de ratón? Cambio el enfoque de los eventos de ratón?
2.- No consigo aplicar un scroll con easing
3.- Mejoras en el código? malas prácticas?

aquí pego el código de la clase por si podeis ayudarme con el código:

simplificando diré que quiero hacer el MouseDown sobre la imagen, su ruta se almacena en posImg

// clase para crear menú dinámico con XML l
class VerImagenes {
// Movie clip referencias
public var container_mc:MovieClip; // contenedor de cada imagen
public var target_mc:MovieClip; // referencia para todo
// mascara para contenedor
public var maskContainer_mc:MovieClip;

// propiedades del CONTENEDOR
private var posTrabLista:Number; // posicion del trabajo en la lista
// alto en pixeles de cada trabajo + separacion entre trabajos (54+ 26)
private var separacionPorTrab:Number;

// nombre de cada instancia de imagen
private var posImg:MovieClip;
private var posSombra:MovieClip;
private var posTxt:TextField;

// Movie clip depths.
private var containerDepth:Number;
private var maskContainerDepth:Number;
private static var imageDepth:Number = 200;
private static var sombraDepth:Number = 0;
private static var textoDepth:Number = 100;
private static var maskDepth:Number = 500;
private static var maskMenuDepth:Number = 1000;
private static var borderDepth:Number = 300;

// Estilo del borde.
private var borderThickness:Number;
private var borderColor:Number;

// Constructor
public function VerImagenes (target:MovieClip, depth:Number, x:Number, y:Number, w:Number, h:Number,altoTrab:Number, borderThickness:Number, borderColor:Number) {
// Asignar los valores de propiedades
target_mc = target;
containerDepth = depth;
maskContainerDepth = depth + 200;
separacionPorTrab = altoTrab;
this.borderThickness = borderThickness; // el this hace referencia a la propiedad
this.borderColor = borderColor; // el this hace referencia a la propiedad

// Cambiar los datos visuales para VerImagenes
createMainContainer(x, y);
createMaskMenuContainer (x, y);
createMenuMask (220,320);
}

//invoca métodos para crear el contenedor, imagen, sombra, máscara y clip de borde
// Crea los clips donde pongo imagen, sombra, mascara y borde
// This method subcontracts all its work out to individual
// metodo de clip-creacion
// lanza la imagen por trabajo completamente formada (img + sombra + texto) y su máscara

public function buildViewer (x:Number,y:Number,w:Number,h:Number,pos:Number):Void {
//// recuperar valor de posicion
posTrabLista = pos; // determina la posicion de cada trabajo en el menu
createImageClip(pos);
createImageClipMask(w, h);
createTxtImg (pos, 0);
createImgSombraClip (pos,-0, 51);
setPosInstanciaTrabajo(0,h); // posiciona el icono del trabajo en el menu
}



// posiciona la imagen de cada trabajo en el escenario
private function setPosInstanciaTrabajo(y:Number,h:Number):Void {
// el tamaño de la imagen + separacion entre trabajos * la posicion que ocupa
//container_mc.image_mc._y += (y + ((separacionPorTrab)*posTrabLista));
posImg._y = (0 + ((separacionPorTrab)*posTrabLista));
posSombra._y = (51 + ((separacionPorTrab)*posTrabLista));
posTxt._y = (56 + ((separacionPorTrab)*posTrabLista));
container_mc.texto_txt._y += (y + ((separacionPorTrab)*posTrabLista));
}


// crea el clip contenedor de la mascara del menu
private function createMaskMenuContainer (x:Number, y:Number):Void {
maskContainer_mc = target_mc.createEmptyMovieClip("maskContainer_mc", maskContainerDepth);
// posicion del clip container
maskContainer_mc._x = x;
maskContainer_mc._y = y;
}

// crea el clip contenedor de todas las características
private function createMainContainer (x:Number, y:Number):Void {
container_mc = target_mc.createEmptyMovieClip("container_mc" + containerDepth, containerDepth);
// posicion del clip container
container_mc._x = x;
// cada trabajo colocado uno debajo del otro
// separación (ancho por numero de instancia creada)
container_mc._y = y;
}


// crea el clip contenedor de la imagen, un clip para cada trabajo
private function createImageClip (pos:Number):Void {
posImg = container_mc.createEmptyMovieClip("image_mc"+pos, imageDepth + pos);

/// lanza el control del ratón
enableMouse ();

}

function enableMouse ():Void {
Mouse.addListener (this);
}

public function onMouseDown () {
trace ("click pulsado")
}

// crea el clip contenedor de la sombra de la imagen
// posiciona la sombra en container mc
private function createImgSombraClip (pos:Number,posx:Number, posy:Number):Void {
posSombra= container_mc.createEmptyMovieClip("sombra_mc"+pos,
}



// crea el clip contenedor del texto asociado a container_mc
// posiciona el texto en container mc
private function createTxtImg (pos:Number, posTxtx:Number):Void {
}


////////////////// CREACION DE MÁSCARAS ///////////////////
// crea el clip contenedor de la mascara para la imagen
private function createImageClipMask (w:Number,
h:Number):Void {

// IMPORTANTE:: solo crea la máscara si hay un ancho y alto especificado en el constructor de la clase
if (!(w > 0 && h > 0)) {
return;
}
// Cre0 un clip en el contenedor que actuará de mascara para la imagen
container_mc.createEmptyMovieClip("mask_mc", maskDepth);
}

// crea el clip contenedor de la mascara para el MENU COM0PLETO
private function createMenuMask (w:Number, h:Number):Void {

// Cre0 un clip en el contenedor que actuará de mascara para el menu
maskContainer_mc.createEmptyMovieClip("maskMenu_mc", maskMenuDepth);
}



/// metodos SETTER
// asigna el texto sacado del xml (variable global tituloTrabajo) al campo de texto que muestra
// el nombre del trabajo
public function setTxtTrabajo (tituloTrabajo:String,txtColor:Number):Void {
posTxt.text = tituloTrabajo; // titulo del trabajo sacado de xml (readxml.as)
// formato de texto

}


// dentro de container, Cre0 un clip para poner el borde
container_mc.createEmptyMovieClip("border_mc", borderDepth);

}


// cargo la imagen
public function loadImage (URL:String, URLSombra:String):Void {
// cargo el jpg en el clip image_mc
posImg.loadMovie(URL);
// carga la sombra en el clip sombra_mc
// container_mc.sombra_mc.loadMovie(URLSombra);
posSombra.loadMovie(URLSombra);
// After one frame passes, the image load will have started,
// at which point we safely apply the mask to the image_mc clip.
// VALIDO HASTA QUE PONGA EL MOVIE CLIP LOADER
target_mc.onEnterFrame = function ():Void {
this.container_mc1.setMask(this.maskContainer_mc.maskMenu_mc);
delete this.onEnterFrame;
}

container_mc.onEnterFrame = function ():Void {
posImg.setMask(this.mask_mc);
delete this.onEnterFrame;
}
}


Muchísimas gracias de antemano, espero que el código esté claro y no demasiado liado.

mig :P :P