[AS3] Bug masque et instanciation de classe
20 novembre 2007 – 21:32J'ai pu remarquer ce que je pense être un bug lorsqu'on utilise un symbole lié à une classe et que ce symbole se trouve sous un masque animé par un shape tween ou alors un motion tween avec un groupe. Comme je le disais, habituellement lorsque je fais un masque c'est un movieclip, cependant dans le cadre d'un projet, j'ai du récupérer une interface graphique réalisé par un flash designer et je n'ai pas tout de suite fait attention que les masques étaient des groupes... et quand bien même... je m'en fichais un peu...
Mais voici en détail le problème qui se pose dans ce genre de situation :
- Créer un nouveau fichier fla
- Dessiner une forme et en faire un symbole MovieClip "monSymbole"
- Créer un nouveau fichier as "maClasse.as"
- Insérer le code suivant :
- A partir de la librairie, lié votre symbole MovieClip à cette classe.
- Sur la timeline glisser votre symbole pour qu'il soit présent sur quelques frames, 24 par exemple.
- Ajouter un stop(); sur la dernière frame de l'animation.
package{ import flash.display.MovieClip; public class maClasse extends MovieClip{ public function maClasse(){ trace(this); } } }
Si vous compilez, vous devez obtenir ceci en fenêtre de sortie "[object maClasse]"
![]()
Tout cela est normal, Flash lit la première frame, le constructeur de la classe qui est lié au symbole s'exécute et on obtient le résultat du trace, une seule et unique fois.
Maintenant ajoutez un layer sur la timeline, créer une forme quelconque et faites une animation en shape tween de la même taille que votre symbole MovieClip et finalement faites un masque de ce layer. Visuellement vous devez avoir quelque qui ressemble à ça :
Si vous compilez vous allez obtenir en sortie le trace qui se trouve dans le constructeur de la classe. Mais il va s'exécuter deux fois. A la première frame (ce qui est normal) mais aussi à la dernière frame de l'animation (ce qui n'est pas normal selon moi).
Lorsque je convertis mon groupe ou mon shape en movieclip, le problème ne se pose plus. Heureusement !
Conclusion, évitons les groupes et les shape tween... et pour les designers si vraiment vous avez besoin de ça alors n'oubliez pas de les convertir en movieclip, ça évitera au développeur de chercher d'où vient ce second appel au constructeur.
One Response to “[AS3] Bug masque et instanciation de classe”
En fait, ce bug est réel depuis plusieurs versions de Flash.
Il s’agit d’un bug lié à l’utilisation d’un masque de Shapes.
En fait, à chaque keyframe d’un masque en interpolation de forme, le ou les clips masqués par ce layer se relancent à leur première frame.
J’ai rêvé d’un correctif sur ce sujet dans Flash CS3… mais rien, le même bug, à moins que ça ne soit volontaire, mais j’apprécierais, dans ce cas, une brève explication de la part d’Adobe…
Bref, pour résumer, si tu avais mis 5 keyframes d’animation sur ton layer de masque, le clip contenu dessous se serait relancé 5 fois.
Ceci est valable pour tout clip, avec ou sans classe liée.
Verdict, faites toujours des masques en clip ou graphics.
By Tybbo on juin 2, 2008