Flash : détecter les clics sur un élément caché par un autre

Comment faire en sorte qu'un clic de souris s'applique à un objet graphique dissimulé derrière un calque ? Voici une méthode pour régler le problème. Un article de Martin Richard.

Ceci est un petit billet, fruit d'un paquet d'heures de recherche pour un résultat fort simple !

Dans le cadre d'une application réalisée en Flash (Action Script 3) - oui, je sais - j'ai une série d'éléments qui sont masqués par une image transparente, faisant office de masque : le calque supérieur prend tout l'espace et capte donc les événements de la souris (notamment le clic).

J'ai cherché plusieurs solutions, j'ai réfléchi à déterminer l'objet cliqué d'après les coordonnées du pointeur, ce qui me semblait complexe étant donné que la forme d'un élément d'un calque en dessous n'est pas vraiment prévisible. Après avoir googlé le problème pendant un moment, je suis tombé sur une propriété de la classe (abstraite) InteractiveObject fort utile : mouseEnabled.

Cette propriété permet de désactiver toute interaction de la souris sur l'objet concerné, et la bonne surprise fût que, tout naturellement, le clic souris prenait pour cible l'élément du dessous.

   1. var gfxElt:MyGraphicElement = new MyGraphicElement();
  2. var mask:MyMask = new MyMask();
  3.      
  4. addChild(gfxElement);
  5. addChild(mask);

L'objet graphique mask recouvre l'objet élément, il n'est plus cliquable.

On récapitule donc rapidement :

  1. mask.mouseEnabled = false;

Maintenant si !

Je suis bien conscient que cette découverte n'est pas génialissime en soi, mais peut-être que ce billet épargnera à l'un d'entre vous de perdre du temps et d'imaginer une solution complétement farfelue proche d'une ré-invention de la roue.

Article publié par Martin Richard (Martiusweb) sous licence Creative Commons.