Si defines un Event.MOUSE_DOWN sobre el formulario, este se ejecutará siempre. Puedes usar hitTestPoint(e.localX,e.localY) para saber si se ha clicado algún botón.
Imaginemos que tenemos un MC "formulario" y, dentro, un MC "botón". Añadamos el Event.MOUSE_DOWN tanto al "formulario" como al "botón"
Código ActionScript :
boton.addEventListener(MouseEvent.MOUSE_DOWN, botonOnMouseDown, false, 0, true);
formulario.addEventListener(MouseEvent.MOUSE_DOWN, formularioOnMouseDown, false, 0, true);
function botonOnMouseDown(e:EventMouse){
trace("le distes al botón");
}
function formularioOnMouseDown(e:EventMouse){
trace("le distes al formulario");
if (boton.hitTestPoint(e.localX,e.localY)){
botonOnMouseDown(e);
}
}
Si tenemos un MC que "tape" el botón, sólo se ejecutará en formularioOnMouseDown. Y si el hitTestPoint es cierto se ejecutará la función botonOnMouseDown (OJO que el e.target y e.currentTarget será el FORMULARIO).
Si ahora no tenemos un MC que tape el botón (debe estar también DENTRO del formulario), siempre que hagamos click sobre el "botón" se ejecutarán las DOS funciones "botonOnMouseDown" y "formularioOnMouseDown" (osea que se ejecutará la función botonOnMouseDown dos veces, una por pulsar el botón y otra porque al ejecutarse el formularioOnMouseDown le hemos dicho que ejecute botonOnMouseDown).
Para evitar eso debemos incluir un stopPropagation() en la función botonOnMouseDown
Código ActionScript :
function botonOnMouseDown(e:EventMouse){
trace("le distes al botón");
e.stopPropagation();
}