2010-03-31 12 views
1

J'ai des MovieClips imbriqués. J'ai un écouteur d'événement sur le parent écoutant pour un clic de souris. Le problème est, l'auditeur ne prend jamais le clic.MovieClips imbriqués ne détectant pas les événements de souris dans Actionscript

code:

var movieClipStack:MovieClip = new MovieClip(); 

    for each (var ol:OwnedLayerable in owned_layerables) 
    { 
     var mc:MovieClip = ol.layerable.mc; 
     movieClipStack.buttonMode = true; 
     movieClipStack.addChild(mc); 
    } 

    movieClipStack.addEventListener(MouseEvent.CLICK, onStackClicked); 

    private function onStackClicked(evt:MouseEvent):void 
    { 
     // Do some stuff 
    } 

Sur movieClipStack, je peux voir que mouseEnabled = true. De plus, buttonMode = true fonctionne exactement comme il est supposé le faire. Mais onStackClicked ne se produit jamais - movieClipStack ne détecte aucun type d'événement souris.

Merci!

Répondre

0

quelques idées ...

Vérifiez tout d'abord pour vous assurer que movieClipStack.mouseEnabled == true, juste pour vous assurer que vous ne désactivent pas, par inadvertance, des messages de la souris sur votre objet.

Ensuite, je voudrais jeter un oeil à ce que hitArea vous avez défini pour movieClipStack avec trace(movieClipStack.hitArea);. Vérifiez ses valeurs width et height pour voir si c'est à peu près ce que vous attendez de la largeur et de la hauteur de movieClipStack.

Ensuite, j'expérimenterais la création d'une image-objet rectangulaire simple et la définir comme hitArea pour movieClipStack.

J'espère que cela fonctionne. Bonne chance!

0

Il existe une propriété peu connue appelée "mouseChildren" que vous devez définir pour les éléments de contenu de votre MovieClip d'écoute de la souris.

Si vous ne supprimez pas ces autres éléments du flux d'événements, ils ont tendance à éclipser les événements d'une manière qui n'est pas si prévisible.

Alors, vous l'assigner comme ceci:

parentMovieClip.mouseChildren = false;// turns off all internal mouse-listening clips 

Si vous mettiez cela à l'intérieur du MovieClip ou à l'intérieur d'une définition de classe, je généralement le faire de cette façon:

mouseChildren = false; 

En outre, voici un article d'Adobe expliquant le tout: http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObjectContainer.html

Espérons que cela aide! Il m'a fallu HOOOOOOOURS pour enfin dénicher celui-ci.