2009-07-12 10 views
0

Je crée un sprite, puis j'ajoute un sprite enfant.Les événements MOUSE_OUT ne se déclenchent pas sur l'enfant lorsque le parent est mouseEnabled = false, mouseChildren = false

J'ajoute un écouteur à l'enfant pour les événements MOUSE_OUT.

Si ma souris est dans l'image-objet enfant lorsque j'ai défini l'image-mère par défaut mouseEnabled = false et mouseChildren = false, MOUSE_OUT n'est pas déclenché sur l'enfant.

Mais quand je déplace la souris, MOUSE_OUT est déclenché sur l'enfant. MOUSE_OUT est également renvoyé si je clique. MOUSE_OUT n'est pas déclenché si je souris.

Alors, que se passe-t-il ici?

This is a related question.


Après avoir étudié le code de back2dos, je découvre ce que je fais différemment appelle stage.focus = null juste avant la mise en mouseChildren = mouseEnabled = false. Je suis en train de mettre l'accent sur la scène à null pour effacer le curseur clignotant d'un champ de texte ... y at-il une meilleure façon de faire cela?


voici le code modifié par back2dos. étapes à reproduire: cliquez sur le champ de texte, obtenez le curseur clignotant. cliquez sur le "bouton", mais ne déplacez pas la souris entre le bas et le haut. notez que le curseur ne clignote pas (bon). Notez également que les événements mouse_out sur le bouton n'ont pas été déclenchés. jusqu'à ce que vous bougez ou cliquez sur la souris.

package { 
    import flash.display.*; 
    import flash.events.*; 
    import flash.geom.ColorTransform; 
    public class Test extends Sprite { 
     private var child:Sprite 
     public function Test() { 
       this.addChild(child = new Sprite()); 
       child.graphics.beginFill(0xFF0000); 
       child.graphics.drawRect(0, 0, 100, 20); 
       child.addEventListener(MouseEvent.CLICK, onClick); 
       child.addEventListener(MouseEvent.MOUSE_OUT, onOut); 
       child.addEventListener(MouseEvent.MOUSE_OVER, onOver); 


     tf = new TextField(); 
     tf.backgroundColor = 0xFF00AA; 
     tf.background = true; 
     tf.type = TextFieldType.INPUT; 
     tf.text = "yo"; 
     tf.y = 100; 
     this.addChild(tf); 
     } 
     private function onOver(e:MouseEvent):void { 
       child.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0xFF); 
     } 
     private function onOut(e:MouseEvent):void { 
       child.transform.colorTransform = new ColorTransform(); 
     } 
     private function onClick(e:MouseEvent):void { 
      //try it here... 
      stage.focus = null; 
       this.mouseChildren = this.mouseEnabled = false; 
       //or try it here... 
       //stage.focus = null; 
     } 

    } 
} 

Répondre

2

il doit y avoir quelque chose de mal avec votre code ... j'ai une configuration minimum ici:

package { 
    import flash.display.*; 
    import flash.events.*; 
    import flash.geom.ColorTransform; 
    public class Test extends Sprite { 
     private var child:Sprite 
     public function Test() { 
      this.addChild(child = new Sprite()); 
      child.graphics.beginFill(0xFF0000); 
      child.graphics.drawRect(0, 0, 100, 20); 
      child.addEventListener(MouseEvent.CLICK, onClick); 
      child.addEventListener(MouseEvent.MOUSE_OUT, onOut); 
      child.addEventListener(MouseEvent.MOUSE_OVER, onOver); 
     } 
     private function onOver(e:MouseEvent):void { 
      child.transform.colorTransform = new ColorTransform(0, 0, 0, 1, 0, 0xFF); 
     } 
     private function onOut(e:MouseEvent):void { 
      child.transform.colorTransform = new ColorTransform(); 
     } 
     private function onClick(e:MouseEvent):void { 
      this.mouseChildren = this.mouseEnabled = false; 
     } 
    } 
} 

tournera au vert, lorsque vous survolez, et rouge à nouveau, si vous passez la souris sur. .. sur clic, il est désactivé avec this.mouseChildren = this.mouseEnabled = false ... sur ma machine, cela déclenche mouseOut (donc le rectangle redevient rouge) ... cela a du sens pour moi ... et la chose avec le fait d'enlever la souris en cliquant, c'est un indicateur précis pour moi, vous devez avoir un bug quelque part ... pourriez-vous essayer de réduire le problème et le poster?

greetz

back2dos

+0

Thx pour votre réponse. J'ai découvert ce que je fais différemment dans mon code. Ajouter stage.focus = null; au début de votre méthode onClick. Je ne suis pas sûr pourquoi cela a l'effet qu'il fait (par exemple, ne pas tirer un mouse_out jusqu'à ce que je bouge ou clique (pas la molette de la souris)). – jedierikb

0

essayer MouseEvent.ROLL_OVER à la place

+0

Malheureusement, une fois stage.focus = null sur ROLL_OVER ou ROLL_OUT sont déclenchés ou provoquent un MOUSE_OUT. – jedierikb

Questions connexes