2016-02-03 5 views
0

J'ai ajouté un écouteur d'événement MOUSE_OVER à mon MovieClip, alors j'ajouté MOUSE_OUT comme ceci:MOUSE OUT est appelée à l'intérieur MovieClip

mc.addEventListener(MouseEvent.MOUSE_OVER, boxItemMouseOver, false, 0, true); 

protected function boxItemMouseOver(e:MouseEvent):void 
    { 

     trace("mouse over"); 
     var boxItem:MovieClip = e.currentTarget as MovieClip; 

     boxItem.addEventListener(MouseEvent.MOUSE_OUT, boxItemMouseOut, false, 0, true); 
     boxItem.removeEventListener(MouseEvent.MOUSE_OVER, boxItemMouseOver);  
    } 


    protected function boxItemMouseOut(e:MouseEvent):void 
    { 

     trace("mouse out"); 
     var boxItem:MovieClip = e.currentTarget as MovieClip; 

     boxItem.addEventListener(MouseEvent.MOUSE_OVER, boxItemMouseOver, false, 0, true); 
     boxItem.removeEventListener(MouseEvent.MOUSE_OUT, boxItemMouseOut);   
    } 

Mais chaque fois que je déplace la souris dans mon MovieClip, la fonction d'événement MOUSE_OUT est être appelé, même si je n'ai toujours pas quitté la zone prise par le MovieClip. J'ai réussi à trouver où mon problème est, mais je n'arrive toujours pas à le résoudre, j'ajoute à mon SWF un curseur qui remplace l'icône de la souris (je cache la souris), une fois que je l'ajoute problème se produit, voici un exemple simple.

code: Simple Source Code, Couple of classes

+0

Votre faux curseur reçoit probablement les événements de la souris. Définissez mouseEnabled sur false –

Répondre

0

Reçoit les ROLL_OUT à la place. MOUSE_OUT est distribué lorsque le curseur a quitté l'un des enfants imbriqués MovieClip.

+0

Mais je veux changer l'état de mon MovieClip une fois que je suis dessus. –

+0

OK, alors utilisez 'ROLL_OVER' et' ROLL_OUT' – fsbmain

+0

J'ai déjà essayé, toujours rien. –

2

Définissez mouseChildren sur false sur boxItem.

+0

Je l'ai fait, ne fonctionne toujours pas, est-ce un problème commun dans Flash. –

+0

Pas s'il y a des pixels non transparents dans toute la zone sur laquelle vous voulez basculer. Une chose que vous pouvez faire pour essayer de comprendre ce qui se passe est d'écouter MOUSE_OVER au niveau supérieur et de tracer la cible de ces événements (chaque fois que votre objet désiré reçoit un MOUSE_OUT, un autre objet reçoit MOUSE_OVER). –

+0

Amy Blankenship est sur la bonne voie. MOUSE_OUT se déclenche chaque fois que la cible actuelle change de mc en quelque chose d'autre, ce qui se passe si l'objet interne à l'intérieur du mc est autorisé à attraper les événements de la souris. Comme dit les paramètres mouseChildren à false corrige le problème. – BotMaster

1

1 .. u have '("souris sur") trace' dans les deux fonctions 2 .. d'abord supprimer la souris sur l'auditeur, que d'ajouter la souris sur écoute 3 .. je ne sais pas obtenir, pourquoi avez-vous besoin de déclarer une nouvelle variable 'boxItem' quand vous pouvez écrire e.target.removeEventListener (..) 4 .. il est impossible de parler de quoi que ce soit, j'ai attrapé plusieurs code inutile en quelques lignes, donc il y a de grandes chances que vous fassiez quelque chose de mal dans votre code, montrez-nous un plus gros morceau de votre code.

p. s. Aussi, essayez mouseEnabled à false avec mouseChildren à false, mais je doute que cela fonctionnera

+0

Merci pour les commentaires, j'ai édité mu question, j'ai également téléchargé un exemple simple et réussi à trouver la source de mon problème ne peut toujours pas le réparer si :). –

+0

@ZouhairElamraniAbouElassad, il suffit de regarder par-dessus une classe, "Articles" et j'ai trouvé votre erreur et la solution :) comme je l'ai mentionné ci-dessus, il était impossible de ce que vous parliez, mouseChildren = false; fonctionne très bien, mais vous ne l'utilisez pas correctement, ne l'utilisez pas avec la variable boxItem, mais avec une variable source, j'ai vu les variables 'Zad_Block_04' et 'Zad_Gate_02' et je suppose qu'elles sont source, alors, attribuez mouseChildren = faux; pour eux, pas à la boxItem – zarmaca

+0

et comme je l'ai également mentionné ci-dessus, il n'y a pas besoin de variable 'boxItem', il suffit d'écrire: e.target.removeEventListener (MouseEvent.MOUSE_OVER, boxItemMouseOver); \t e.target.addEventListener (MouseEvent.MOUSE_OUT, boxItemMouseOut, false, 0, true); \t e.target.setChildIndex (e.target.getChildByName ("actif"), (boxItem.numChildren-1)); – zarmaca