Foros del Web » Creando para Internet » Flash y Actionscript »

Detectar click "a traves" de una sombra (SOLUCIONADO)

Estas en el tema de Detectar click "a traves" de una sombra (SOLUCIONADO) en el foro de Flash y Actionscript en Foros del Web. Muy buenas, es la primera vez que paso por aqui, asi que espero tener suerte con mi problema Me baje una plantilla en flash para ...
  #1 (permalink)  
Antiguo 25/03/2009, 23:20
 
Fecha de Ingreso: marzo-2009
Mensajes: 13
Antigüedad: 15 años, 1 mes
Puntos: 1
Pregunta Detectar click "a traves" de una sombra (SOLUCIONADO)

Muy buenas, es la primera vez que paso por aqui, asi que espero tener suerte con mi problema

Me baje una plantilla en flash para una web, pero estaba en AS1 (lo que tienen las plantillas gratuitas, ke son viejitas jeje).
El caso es que debido a los cambios que en esta estoy haciendo he tenido que pasarla toda a AS3. De momento, va todo bien pero me he encontrado con un problema que me es imposible solucionar.
La pelicula tiene ventanas que se arrastran por todo el documento, al pulsar en cada una esta se pone por encima de todas las demas (estilo ventanas de windows). Estas ventanas tienen una sombra, para dar efecto flotante.
Pues bien, conforme viene la pelicula recien descargada, todo funciona como deberia, pero ahora que tengo la mayor parte del codigo pasado a AS3 he observado que al intentar clickar en una ventana que esta por detras de esta, digamos a traves de la sombra de la ventana de delante, no me deja. Pero no hay ningun codigo ni nada raro que permita hacer esto en la plantilla original, asi que no se si es un problema de diseño (que no he tocado aun, solo he cambiado codigo) o de ActionScript.

Os adjunto una imagen para que veais mas o menos por donde van los tiros.


Saludos y gracias de antemano.

Imagen: h t t p ://yfrog.com/3rimgerrflashj
Lo que está dentro del cuadro rojo, es el area de la sombra. No puedo clickar en la imagen de abajo a traves de esa zona, cosa que en el archivo original si podia :S

Última edición por pepinliria; 26/03/2009 a las 13:14
  #2 (permalink)  
Antiguo 26/03/2009, 12:03
 
Fecha de Ingreso: marzo-2009
Mensajes: 13
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Detectar click "a traves" de una sombra

Bien, ya está solucionado, paso a explicar el tema para si alguien alguna vez lo necesita, ya que para mí es algo muy útil.

El tema es que con AS3, eventos como clics de ratón ocurren sobre un determinado objeto individualmente, vamos que cuando haces clic sobre un botón por ejemplo, solo ese objeto recibe el evento, a pesar de que físicamente el ratón este sobre otro objeto también.

En AS1 y AS2 cuando los botones o clips de película reciben un evento, coge preferencia el objeto que está por encima. Si tienes 2 botones en la misma posición con la misma forma y haces clic, el de arriba del todo es el único que recibe el evento, como ahora en AS3.

Aun así, en AS1 y AS2, los clips de película que no tenían asociado un evento de ratón (onPress, onRelease...) no capturan los eventos y permiten que los objetos que hay detrás los capturen. Esto en AS3 no pasa. Lo que sí se puede, es decidir si un objeto, tenga o no event listeners, capture los eventos.

Esto se hace con la propiedad mouseEnabled (flash.display.InteractiveObject.mouseEnabled).

Cuando la propiedad mouseEnabled de un display object (del tipo InteractiveObject, no todos los display objects) es true (por defecto) ese objeto, y solo ese objeto, capturara los eventos de ratón, previniendo a los objetos que hay por detrás que reciban el evento. Cuando es false, el objeto no recibirá el evento y el evento atravesara el objeto, pudiéndose capturar desde el objeto que hay detrás.

Como he comentado, mouseEnabled es verdadero por defecto. Vamos, que todos los eventos serán capturados exclusivamente por los objetos que hay encima.


Aquí os dejo un ejemplo para que lo probéis. Solo tenéis que crear un archivo nuevo de flash AS3 y pegar el código en el primer fotograma y a probar. Veréis que tal como está el código (con la línea que esta comentada) el objeto de abajo no recibe eventos a través del de arriba, si la descomentais veréis que haciendo clic en el objeto de abajo a través del de arriba sí que los recibe.

En mi caso solo he tenido que ponerle la propiedad a la sombra, que era la que me molestaba.

Saludos y espero no haber sido demasiado extenso.


Código:
var cuadradoSuperior:Sprite = new Sprite();
cuadradoSuperior.name = "cuadradoSuperior";
cuadradoSuperior.graphics.beginFill(0x00FF00, .6);
cuadradoSuperior.graphics.drawRect(25, 20, 100,50);
cuadradoSuperior.graphics.endFill();

var cuadradoInferior:Sprite = new Sprite();
cuadradoInferior.name = "cuadradoInferior";
cuadradoInferior.graphics.beginFill(0xAA0000, 1);
cuadradoInferior.graphics.drawRect(0, 00, 100,50);
cuadradoInferior.graphics.endFill();

addChild(cuadradoInferior);
addChild(cuadradoSuperior);

cuadradoInferior.addEventListener(MouseEvent.CLICK, eventoClick);

//cuadradoSuperior.mouseEnabled = false;

function eventoClick(event:MouseEvent):void {
    var cuadrado:Sprite = event.target as Sprite;
    if (cuadrado) {
        trace(cuadrado.name);
    }
}

Última edición por pepinliria; 26/03/2009 a las 13:22
  #3 (permalink)  
Antiguo 25/12/2009, 11:00
 
Fecha de Ingreso: diciembre-2009
Mensajes: 1
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Detectar click "a traves" de una sombra (SOLUCIONADO)

Me he registrado en este foro solo para darte las gracias, no te molestes en contestar, no creo qe vuelva a usar la cuenta ni a entrar, solo eso:

Gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:23.