[AS3] buttonMode sur un MovieClip avec un texte dynamique

3 décembre 2007 – 18:15

Encore un cas de figure qui laisse perplexe lorsqu'on ne maitrise pas encore convenablement le système évènementiel.

  1. Créer un champ texte dynamique sur la scène. "blablabla"
  2. Faites en un symbole MovieClip (F8) et nommez-le "mc"
  3. Recopier le code suivant sur la première frame de votre timeline
mc.buttonMode =  true;
mc.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(e:MouseEvent):void{
 trace(e);
}

Compilez, cliquez sur blablabla... la fenêtre de sortie montre bien le trace de l'event click de MouseEvent. Cependant malgré que vous avez spécifié buttonMode = true, le curseur de la souris ne change pas au survol sur le texte. Si vous mettez votre champs texte en statique, ça fonctionnera... mais pas en dynamique. C'est étrange au premier coup d'oeil mais après un passage par la documentation sur buttonMode nous révèle ceci :

Additionally, consider whether you want the children of your sprite to be mouse enabled. Most buttons do not enable mouse interactivity for their child objects because it confuses the event flow. To disable mouse interactivity for all child objects, you must set the mouseChildren property (inherited from the DisplayObjectContainer class) to false.

On serait donc peut-être dans une confusion entre évènements, puisque un texte dynamique en Flash CS 3 émet des TextEvent. Ajoutez la ligne suivante comme spécifié dans la documentation

mc.mouseChildren = false;

Maintenant ça fonctionne convenablement.

Tentative d'explication sans rentrer dans les détails, si vous ajoutez un lien hypertexte sur votre champ texte, vous verrez que le curseur de la souris fonctionnera normalement, la preuve qu'il y a bien un évènement sur le champ texte indépendamment du MovieClip dans lequel se trouve ce champ texte. Par contre si vous dessinez une forme à côté du champ texte, vous n'aurez aucun soucis car il n'émet pas d'évènements. En indiquant mouseChildren = false vous demandez que seulement les évènements du MovieClip soit diffusé et plus ceux de ses enfants. Dans ce cas-ci le champ de texte dynamique est un enfant de mc à qui on enlève la faculté de pouvoir émettre des évènements.

  1. 4 Responses to “[AS3] buttonMode sur un MovieClip avec un texte dynamique”

  2. Merci c’est très clair…

    By GuiRoux on mar 17, 2008

  3. Ahh !!

    Merci beaucoup, ça fait des heures que je me prenais la tête avec ça !

    By Miles on oct 7, 2008

  4. Merci et merci Google pour m’avoir aidé à trouvé ce billet :P

    By Milhouse on oct 15, 2008

  5. On se le refait sans faute….

    Merci, et merci Google pour m’avoir aidé à trouver ce billet :P

    By Milhouse on oct 15, 2008

Post a Comment