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?
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;
}
}
}
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