2010-02-11 20 views
10

Hace un par de años, todavía hay algo sobre mouseEnabled que no recibo. Tengo un Sprite (por ejemplo, aquí "Cielo", que contiene muchos objetos, uno de ellos es una Nube, que no deseo recibir Eventos del Ratón. Superpongo este Cielo en otros objetos de visualización. Quiero que la nube sea visible, pero no bloquear los eventos de ratón Si usted ve un árbol a través de las nubes que debería ser capaz de hacer clic en el árbolas3 mouseEnabled sigue siendo un problema para mí

en la clase del cielo:..

mouseEnabled = false; 
cloud.mouseEnabled = false; 
cloud.mouseChildren = false; 

Incluso con esta configuración, cuando el la nube está sobre el árbol No puedo hacer clic en el árbol porque la nube lo bloquea. ¿Por qué?

+3

Premio Triynko la respuesta! –

Respuesta

3

¿Dicen que hay "muchos objetos" allí? Es más que probable que algo e lse lo está bloqueando Recomiendo añadir un oyente al escenario y entonces usted puede ver qué objeto está recibiendo clics:

import flash.utils.getQualifiedClassName; 
stage.addEventListener(MouseEvent.CLICK, onClick); 
private function onClick(event:MouseEvent):void 
{ 
    trace(event.target.name, getQualifiedClassName(event.target)); 
} 

mensaje más código y que probablemente pueda ayudar más.

+0

ok, olvida la parte de "muchos objetos". Solo un objeto que quiero deshabilitar, y uno que quiero habilitar. El objeto habilitado es muy pequeño y no afecta esto. Esto es lo que obtengo cuando uso el código que publicó: instancia5 flash.display :: Sprite – phil

+0

bien, así que hay un sprite allí sin un nombre de instancia que recibe el clic en lugar de la nube. ¿tu árbol tiene un nombre de instancia? Daría los nombres de tus clips para que puedas descubrir cuál bloquea realmente. – typeoneerror

26

Aunque Sky tiene mouseEnabled/mouseChildren configurado en falso ... sigue siendo un objeto, aún ocupa espacio y, por lo tanto, todavía actúa como área de acceso para cualquier contenedor de padres que no tenga mouseEnabled/mouseChildren configurado en falso.

Por lo tanto, sospecho que su objeto Sky no está en el mismo contenedor primario que su objeto Tree. Su objeto Sky probablemente tenga su propio objeto contenedor principal, que es el culpable de interceptar los eventos.

Para elaborar: Cualquier objeto que contenga NADA tendrá un área de aciertos e interceptará clics del mouse, aunque todos los elementos individuales que contiene (formas, objetos secundarios, etc.) pueden tener mouseEnabled/mouseChildren establecido en falso.

Así que aunque su objeto Sky tiene mouseEnabled configurado en falso, su Sky (y sus hijos) aún ocupan espacio, y por lo tanto todavía dan al contenedor principal de Sky un área de impacto para interceptar los eventos del mouse.

Su solución, por lo tanto, es asegurarse de que todos los contenedores primarios de Sky tengan su propiedad mouseEnabled establecida en falso, al menos hasta (pero sin incluir) el primer contenedor ancestro común de los objetos Tree y Sky.

Además, mediante el establecimiento de mouseEnabled = false y dejando mouseChildren = true, se puede tener un contenedor en el que sólo se seleccione a los niños con mouseEnabled = true recibir eventos de clic :)

+0

Gracias, estaba teniendo un problema similar con los campos de texto, y estaba en un contenedor que compartía un ancestro común con un botón. Sin referencia directa al contenedor, pude llamar al padre y establecer el mouseEnabled/Children en falso. – gltovar

Cuestiones relacionadas