Comunidad de diseño web y desarrollo en internet online

Problema de profundidades con MovieClips.

Citar            
MensajeEscrito el 10 Feb 2009 10:00 pm
Buenas a todos, Llevo tiempo leyendo este foro pero hasta ahora no me habia registrado. Aquí va mi primera duda:

En AS2 podias colocar MovieClips sobre otros objetos que capturasen eventos de raton (botones, otros mcs, campos de texto...) y para que los objetos inferiores quedasen inactivos tenia una ñapa bastante eficaz. Ahora con AS3 el problema que tengo es justo el contrario, necesito colocar una animacion con ruido de TV sobre un formulario, que se aplique sobre todos los elementos inferiores, pero sin que dejen de ser "clickeables", ¿Sabéis como puedo hacerlo? en la documentación no he encontrado nada; la única propiedad que he visto posible es enabled, pero nanai :(

Gracias!

Por enreda

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Feb 2009 10:06 pm
Este post funcionaria mejor en el foro de AS3

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 11 Feb 2009 02:27 am
Movido a AS3

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 11 Feb 2009 06:11 am
leete sobre mousechildrens y mouseEnabled.

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 11 Feb 2009 08:58 am
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();
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Feb 2009 09:49 am
Pensandolo un poco mejor, supongo que también se puede añadir el listener sobre el "ruido" y usar el hitTestByPoint en ese listener y nos olvidamos de stopPropagation y demás vainas :(

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Mar 2009 08:13 pm
Muchas gracias por las respuestas :)

Al final lo solucioné con el mc.mouseEnabled = false; pero la segunda opción la guardaré también por si en un futuro necesito capturar elementos de distintos niveles.

Por enreda

6 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.